]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | /// \file proto_typeof.hpp | |
3 | /// Type registrations so that proto expression templates can be used together | |
4 | /// with the Boost.Typeof library. | |
5 | // | |
6 | // Copyright 2008 Eric Niebler. Distributed under the Boost | |
7 | // Software License, Version 1.0. (See accompanying file | |
8 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 | ||
10 | #ifndef BOOST_XPRESSIVE_PROTO_PROTO_TYPEOF_H | |
11 | #define BOOST_XPRESSIVE_PROTO_PROTO_TYPEOF_H | |
12 | ||
13 | #include <boost/config.hpp> | |
14 | #include <boost/typeof/typeof.hpp> | |
15 | #include <boost/proto/proto_fwd.hpp> | |
16 | #include <boost/proto/deep_copy.hpp> | |
17 | #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() | |
18 | ||
19 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::terminal) | |
20 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::unary_plus) | |
21 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::negate) | |
22 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::dereference) | |
23 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::complement) | |
24 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::address_of) | |
25 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_not) | |
26 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_inc) | |
27 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_dec) | |
28 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_inc) | |
29 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_dec) | |
30 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left) | |
31 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right) | |
32 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies) | |
33 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides) | |
34 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus) | |
35 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus) | |
36 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus) | |
37 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less) | |
38 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater) | |
39 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less_equal) | |
40 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater_equal) | |
41 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::equal_to) | |
42 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::not_equal_to) | |
43 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_or) | |
44 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_and) | |
45 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and) | |
46 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or) | |
47 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor) | |
48 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::comma) | |
49 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::mem_ptr) | |
50 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::assign) | |
51 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left_assign) | |
52 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right_assign) | |
53 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies_assign) | |
54 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides_assign) | |
55 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus_assign) | |
56 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus_assign) | |
57 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus_assign) | |
58 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and_assign) | |
59 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or_assign) | |
60 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor_assign) | |
61 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::subscript) | |
62 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::member) | |
63 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::if_else_) | |
64 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::function) | |
65 | ||
66 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::exprns_::is_proto_expr) | |
67 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::expr, (typename)(typename)(long)) | |
68 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::basic_expr, (typename)(typename)(long)) | |
69 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::utility::literal, (typename)(typename)) | |
70 | ||
71 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_generator) | |
72 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_grammar) | |
73 | BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_domain) | |
74 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::domain, 3) | |
75 | ||
76 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::term, 1) | |
77 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list1, 1) | |
78 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list2, 2) | |
79 | // can't use PP metaprogramming here because all typeof registrations | |
80 | // must be on separate lines. | |
81 | #if BOOST_PROTO_MAX_ARITY >= 3 | |
82 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list3, 3) | |
83 | #endif | |
84 | #if BOOST_PROTO_MAX_ARITY >= 4 | |
85 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list4, 4) | |
86 | #endif | |
87 | #if BOOST_PROTO_MAX_ARITY >= 5 | |
88 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list5, 5) | |
89 | #endif | |
90 | #if BOOST_PROTO_MAX_ARITY >= 6 | |
91 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list6, 6) | |
92 | #endif | |
93 | #if BOOST_PROTO_MAX_ARITY >= 7 | |
94 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list7, 7) | |
95 | #endif | |
96 | #if BOOST_PROTO_MAX_ARITY >= 8 | |
97 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list8, 8) | |
98 | #endif | |
99 | #if BOOST_PROTO_MAX_ARITY >= 9 | |
100 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list9, 9) | |
101 | #endif | |
102 | #if BOOST_PROTO_MAX_ARITY >= 10 | |
103 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list10, 10) | |
104 | #endif | |
105 | #if BOOST_PROTO_MAX_ARITY >= 11 | |
106 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list11, 11) | |
107 | #endif | |
108 | #if BOOST_PROTO_MAX_ARITY >= 12 | |
109 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list12, 12) | |
110 | #endif | |
111 | #if BOOST_PROTO_MAX_ARITY >= 13 | |
112 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list13, 13) | |
113 | #endif | |
114 | #if BOOST_PROTO_MAX_ARITY >= 14 | |
115 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list14, 14) | |
116 | #endif | |
117 | #if BOOST_PROTO_MAX_ARITY >= 15 | |
118 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list15, 15) | |
119 | #endif | |
120 | #if BOOST_PROTO_MAX_ARITY >= 16 | |
121 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list16, 16) | |
122 | #endif | |
123 | #if BOOST_PROTO_MAX_ARITY >= 17 | |
124 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list17, 17) | |
125 | #endif | |
126 | #if BOOST_PROTO_MAX_ARITY >= 18 | |
127 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list18, 18) | |
128 | #endif | |
129 | #if BOOST_PROTO_MAX_ARITY >= 19 | |
130 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list19, 19) | |
131 | #endif | |
132 | #if BOOST_PROTO_MAX_ARITY >= 20 | |
133 | BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list20, 20) | |
134 | #endif | |
135 | ||
136 | #define BOOST_PROTO_AUTO(Var, Expr) BOOST_AUTO(Var, boost::proto::deep_copy(Expr)) | |
137 | #define BOOST_PROTO_AUTO_TPL(Var, Expr) BOOST_AUTO_TPL(Var, boost::proto::deep_copy(Expr)) | |
138 | ||
139 | #endif |