1<?xml version="1.0" encoding="utf-8"?> 2<!-- 3 Copyright 2012 Eric Niebler 4 5 Distributed under the Boost 6 Software License, Version 1.0. (See accompanying 7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 8 --> 9<header name="boost/proto/proto_fwd.hpp"> 10 <para>Forward declarations of all of proto's public types and functions. </para> 11 <namespace name="boost"> 12 <namespace name="proto"> 13 <struct name="callable"> 14 <purpose>Base class for callable <conceptname>PolymorphicFunctionObject</conceptname>s</purpose> 15 <description> 16 <para> 17 When defining a callable <conceptname>PolymorphicFunctionObject</conceptname>, inherit 18 from <computeroutput>proto::callable</computeroutput> so that it can be used to create 19 a <conceptname>CallableTransform</conceptname>. 20 </para> 21 <para> 22 <computeroutput><classname>proto::is_callable</classname><T>::value</computeroutput> is 23 <computeroutput>true</computeroutput> for types that inherit from 24 <computeroutput>proto::callable</computeroutput>. 25 </para> 26 </description> 27 </struct> 28 <data-member name="N"> 29 <description> 30 <para>Array size wildcard for Proto grammars that match array terminals.</para></description> 31 <type>int const</type> 32 </data-member> 33 <namespace name="functional"> 34 <typedef name="make_terminal"> 35 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::terminal</classname> ></type> 36 </typedef> 37 <typedef name="make_unary_plus"> 38 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::unary_plus</classname> ></type> 39 </typedef> 40 <typedef name="make_negate"> 41 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::negate</classname> ></type> 42 </typedef> 43 <typedef name="make_dereference"> 44 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::dereference</classname> ></type> 45 </typedef> 46 <typedef name="make_complement"> 47 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::complement</classname> ></type> 48 </typedef> 49 <typedef name="make_address_of"> 50 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::address_of</classname> ></type> 51 </typedef> 52 <typedef name="make_logical_not"> 53 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_not</classname> ></type> 54 </typedef> 55 <typedef name="make_pre_inc"> 56 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::pre_inc</classname> ></type> 57 </typedef> 58 <typedef name="make_pre_dec"> 59 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::pre_dec</classname> ></type> 60 </typedef> 61 <typedef name="make_post_inc"> 62 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::post_inc</classname> ></type> 63 </typedef> 64 <typedef name="make_post_dec"> 65 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::post_dec</classname> ></type> 66 </typedef> 67 <typedef name="make_shift_left"> 68 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_left</classname> ></type> 69 </typedef> 70 <typedef name="make_shift_right"> 71 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_right</classname> ></type> 72 </typedef> 73 <typedef name="make_multiplies"> 74 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::multiplies</classname> ></type> 75 </typedef> 76 <typedef name="make_divides"> 77 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::divides</classname> ></type> 78 </typedef> 79 <typedef name="make_modulus"> 80 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::modulus</classname> ></type> 81 </typedef> 82 <typedef name="make_plus"> 83 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::plus</classname> ></type> 84 </typedef> 85 <typedef name="make_minus"> 86 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::minus</classname> ></type> 87 </typedef> 88 <typedef name="make_less"> 89 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::less</classname> ></type> 90 </typedef> 91 <typedef name="make_greater"> 92 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::greater</classname> ></type> 93 </typedef> 94 <typedef name="make_less_equal"> 95 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::less_equal</classname> ></type> 96 </typedef> 97 <typedef name="make_greater_equal"> 98 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::greater_equal</classname> ></type> 99 </typedef> 100 <typedef name="make_equal_to"> 101 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::equal_to</classname> ></type> 102 </typedef> 103 <typedef name="make_not_equal_to"> 104 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::not_equal_to</classname> ></type> 105 </typedef> 106 <typedef name="make_logical_or"> 107 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_or</classname> ></type> 108 </typedef> 109 <typedef name="make_logical_and"> 110 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_and</classname> ></type> 111 </typedef> 112 <typedef name="make_bitwise_and"> 113 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_and</classname> ></type> 114 </typedef> 115 <typedef name="make_bitwise_or"> 116 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_or</classname> ></type> 117 </typedef> 118 <typedef name="make_bitwise_xor"> 119 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_xor</classname> ></type> 120 </typedef> 121 <typedef name="make_comma"> 122 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::comma</classname> ></type> 123 </typedef> 124 <typedef name="make_mem_ptr"> 125 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::mem_ptr</classname> ></type> 126 </typedef> 127 <typedef name="make_assign"> 128 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::assign</classname> ></type> 129 </typedef> 130 <typedef name="make_shift_left_assign"> 131 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_left_assign</classname> ></type> 132 </typedef> 133 <typedef name="make_shift_right_assign"> 134 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_right_assign</classname> ></type> 135 </typedef> 136 <typedef name="make_multiplies_assign"> 137 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::multiplies_assign</classname> ></type> 138 </typedef> 139 <typedef name="make_divides_assign"> 140 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::divides_assign</classname> ></type> 141 </typedef> 142 <typedef name="make_modulus_assign"> 143 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::modulus_assign</classname> ></type> 144 </typedef> 145 <typedef name="make_plus_assign"> 146 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::plus_assign</classname> ></type> 147 </typedef> 148 <typedef name="make_minus_assign"> 149 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::minus_assign</classname> ></type> 150 </typedef> 151 <typedef name="make_bitwise_and_assign"> 152 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_and_assign</classname> ></type> 153 </typedef> 154 <typedef name="make_bitwise_or_assign"> 155 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_or_assign</classname> ></type> 156 </typedef> 157 <typedef name="make_bitwise_xor_assign"> 158 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_xor_assign</classname> ></type> 159 </typedef> 160 <typedef name="make_subscript"> 161 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::subscript</classname> ></type> 162 </typedef> 163 <typedef name="make_if_else"> 164 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::if_else_</classname> ></type> 165 </typedef> 166 <typedef name="make_function"> 167 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::function</classname> ></type> 168 </typedef> 169 </namespace> 170 <typedef name="_flatten"> 171 <type><classname>proto::functional::flatten</classname></type> 172 </typedef> 173 <typedef name="_make_pair"> 174 <type><classname>proto::functional::make_pair</classname></type> 175 </typedef> 176 <typedef name="_first"> 177 <type><classname>proto::functional::first</classname></type> 178 </typedef> 179 <typedef name="_second"> 180 <type><classname>proto::functional::second</classname></type> 181 </typedef> 182 <typedef name="_pop_back"> 183 <type><classname>proto::functional::pop_back</classname></type> 184 </typedef> 185 <typedef name="_pop_front"> 186 <type><classname>proto::functional::pop_front</classname></type> 187 </typedef> 188 <typedef name="_push_back"> 189 <type><classname>proto::functional::push_back</classname></type> 190 </typedef> 191 <typedef name="_push_front"> 192 <type><classname>proto::functional::push_front</classname></type> 193 </typedef> 194 <typedef name="_reverse"> 195 <type><classname>proto::functional::reverse</classname></type> 196 </typedef> 197 <typedef name="_eval"> 198 <type><classname>proto::functional::eval</classname></type> 199 </typedef> 200 <typedef name="_deep_copy"> 201 <type><classname>proto::functional::deep_copy</classname></type> 202 </typedef> 203 <typedef name="_make_terminal"> 204 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::terminal</classname> ></type> 205 </typedef> 206 <typedef name="_make_unary_plus"> 207 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::unary_plus</classname> ></type> 208 </typedef> 209 <typedef name="_make_negate"> 210 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::negate</classname> ></type> 211 </typedef> 212 <typedef name="_make_dereference"> 213 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::dereference</classname> ></type> 214 </typedef> 215 <typedef name="_make_complement"> 216 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::complement</classname> ></type> 217 </typedef> 218 <typedef name="_make_address_of"> 219 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::address_of</classname> ></type> 220 </typedef> 221 <typedef name="_make_logical_not"> 222 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_not</classname> ></type> 223 </typedef> 224 <typedef name="_make_pre_inc"> 225 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::pre_inc</classname> ></type> 226 </typedef> 227 <typedef name="_make_pre_dec"> 228 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::pre_dec</classname> ></type> 229 </typedef> 230 <typedef name="_make_post_inc"> 231 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::post_inc</classname> ></type> 232 </typedef> 233 <typedef name="_make_post_dec"> 234 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::post_dec</classname> ></type> 235 </typedef> 236 <typedef name="_make_shift_left"> 237 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_left</classname> ></type> 238 </typedef> 239 <typedef name="_make_shift_right"> 240 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_right</classname> ></type> 241 </typedef> 242 <typedef name="_make_multiplies"> 243 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::multiplies</classname> ></type> 244 </typedef> 245 <typedef name="_make_divides"> 246 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::divides</classname> ></type> 247 </typedef> 248 <typedef name="_make_modulus"> 249 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::modulus</classname> ></type> 250 </typedef> 251 <typedef name="_make_plus"> 252 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::plus</classname> ></type> 253 </typedef> 254 <typedef name="_make_minus"> 255 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::minus</classname> ></type> 256 </typedef> 257 <typedef name="_make_less"> 258 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::less</classname> ></type> 259 </typedef> 260 <typedef name="_make_greater"> 261 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::greater</classname> ></type> 262 </typedef> 263 <typedef name="_make_less_equal"> 264 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::less_equal</classname> ></type> 265 </typedef> 266 <typedef name="_make_greater_equal"> 267 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::greater_equal</classname> ></type> 268 </typedef> 269 <typedef name="_make_equal_to"> 270 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::equal_to</classname> ></type> 271 </typedef> 272 <typedef name="_make_not_equal_to"> 273 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::not_equal_to</classname> ></type> 274 </typedef> 275 <typedef name="_make_logical_or"> 276 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_or</classname> ></type> 277 </typedef> 278 <typedef name="_make_logical_and"> 279 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::logical_and</classname> ></type> 280 </typedef> 281 <typedef name="_make_bitwise_and"> 282 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_and</classname> ></type> 283 </typedef> 284 <typedef name="_make_bitwise_or"> 285 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_or</classname> ></type> 286 </typedef> 287 <typedef name="_make_bitwise_xor"> 288 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_xor</classname> ></type> 289 </typedef> 290 <typedef name="_make_comma"> 291 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::comma</classname> ></type> 292 </typedef> 293 <typedef name="_make_mem_ptr"> 294 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::mem_ptr</classname> ></type> 295 </typedef> 296 <typedef name="_make_assign"> 297 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::assign</classname> ></type> 298 </typedef> 299 <typedef name="_make_shift_left_assign"> 300 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_left_assign</classname> ></type> 301 </typedef> 302 <typedef name="_make_shift_right_assign"> 303 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::shift_right_assign</classname> ></type> 304 </typedef> 305 <typedef name="_make_multiplies_assign"> 306 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::multiplies_assign</classname> ></type> 307 </typedef> 308 <typedef name="_make_divides_assign"> 309 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::divides_assign</classname> ></type> 310 </typedef> 311 <typedef name="_make_modulus_assign"> 312 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::modulus_assign</classname> ></type> 313 </typedef> 314 <typedef name="_make_plus_assign"> 315 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::plus_assign</classname> ></type> 316 </typedef> 317 <typedef name="_make_minus_assign"> 318 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::minus_assign</classname> ></type> 319 </typedef> 320 <typedef name="_make_bitwise_and_assign"> 321 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_and_assign</classname> ></type> 322 </typedef> 323 <typedef name="_make_bitwise_or_assign"> 324 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_or_assign</classname> ></type> 325 </typedef> 326 <typedef name="_make_bitwise_xor_assign"> 327 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::bitwise_xor_assign</classname> ></type> 328 </typedef> 329 <typedef name="_make_subscript"> 330 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::subscript</classname> ></type> 331 </typedef> 332 <typedef name="_make_if_else"> 333 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::if_else_</classname> ></type> 334 </typedef> 335 <typedef name="_make_function"> 336 <type><classname>proto::functional::make_expr</classname>< <classname>proto::tag::function</classname> ></type> 337 </typedef> 338 <typedef name="_childN"> 339 <purpose>For each <replaceable>N</replaceable> in <computeroutput>[0,BOOST_PROTO_MAX_ARITY)</computeroutput></purpose> 340 <type><classname>proto::_child_c</classname>< <replaceable>N</replaceable> ></type> 341 </typedef> 342 <typedef name="_child"> 343 <type><classname alt="proto::_childN">proto::_child0</classname></type> 344 </typedef> 345 <typedef name="_left"> 346 <type><classname alt="proto::_childN">proto::_child0</classname></type> 347 </typedef> 348 <typedef name="_right"> 349 <type><classname alt="proto::_childN">proto::_child1</classname></type> 350 </typedef> 351 </namespace> 352 </namespace> 353 <macro name="BOOST_PROTO_MAX_ARITY"> 354 <purpose>Controls the maximum number of child nodes an expression may have.</purpose> 355 <description> 356 <para> 357 <computeroutput>BOOST_PROTO_MAX_ARITY</computeroutput> defaults to 10. It may be set higher or lower, but not 358 lower than 3. Setting it higher will have a negative effect on compile times. 359 </para> 360 <para> 361 See also <computeroutput><macroname>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY</macroname></computeroutput>. 362 </para> 363 </description> 364 </macro> 365 <macro name="BOOST_PROTO_MAX_LOGICAL_ARITY"> 366 <purpose>Controls the maximum number of sub-grammars that 367 <computeroutput> 368 <classname alt="boost::proto::or_">proto::or_<></classname> 369 </computeroutput> and 370 <computeroutput> 371 <classname alt="boost::proto::and_">proto::and_<></classname> 372 </computeroutput> accept.</purpose> 373 <description> 374 <para> 375 <computeroutput>BOOST_PROTO_MAX_LOGICAL_ARITY</computeroutput> defaults to 10. It may be set higher or lower. Setting 376 it higher will have a negative effect on compile times. 377 </para> 378 </description> 379 </macro> 380 <macro name="BOOST_PROTO_MAX_FUNCTION_CALL_ARITY"> 381 <purpose>Controls the maximum number of arguments that <computeroutput>operator()</computeroutput> overloads 382 accept.</purpose> 383 <description> 384 <para> 385 When setting 386 <computeroutput> 387 <macroname>BOOST_PROTO_MAX_ARITY</macroname> 388 </computeroutput> higher than the default, compile times 389 slow down considerably. That is due in large part to the explosion in the number of 390 <computeroutput>operator()</computeroutput> overloads that must be generated for each 391 Proto expression type. By setting <computeroutput>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY</computeroutput> 392 lower than <computeroutput><macroname>BOOST_PROTO_MAX_ARITY</macroname></computeroutput>, 393 compile times can be sped up considerably. 394 </para> 395 </description> 396 </macro> 397</header> 398