| <?xml version="1.0" encoding="utf-8"?> |
| <header name="boost/proto/generate.hpp"> |
| <para>Contains definition of |
| <computeroutput><classname alt="boost::proto::default_generator">proto::default_generator</classname></computeroutput>, |
| <computeroutput><classname alt="boost::proto::generator">proto::generator</classname><></computeroutput>, |
| <computeroutput><classname alt="boost::proto::pod_generator">proto::pod_generator</classname><></computeroutput> |
| and other utilities that users can use to post-process new expression objects that |
| Proto creates.</para> |
| <namespace name="boost"> |
| <namespace name="proto"> |
| <!-- proto::default_generator --> |
| <struct name="default_generator"> |
| <purpose>A simple generator that passes an expression through unchanged.</purpose> |
| <description> |
| <para> |
| Generators are intended for use as the first template parameter to the |
| <computeroutput><classname alt="proto::domain">proto::domain<></classname></computeroutput> |
| class template and control if and how expressions within that domain are to be customized. |
| The <computeroutput>proto::default_generator</computeroutput> makes no modifications to the |
| expressions passed to it. |
| </para> |
| </description> |
| <inherit> |
| <type>proto::callable</type> |
| </inherit> |
| <struct-specialization name="result"> |
| <template> |
| <template-type-parameter name="This"/> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <specialization> |
| <template-arg>This(Expr)</template-arg> |
| </specialization> |
| <typedef name="type"> |
| <type>Expr</type> |
| </typedef> |
| </struct-specialization> |
| <method-group name="public member functions"> |
| <method name="operator()" cv="const"> |
| <type>Expr</type> |
| <template> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <parameter name="expr"> |
| <paramtype>Expr const &</paramtype> |
| <description> |
| <para>A Proto expression</para> |
| </description> |
| </parameter> |
| <returns> |
| <para><computeroutput>expr</computeroutput></para> |
| </returns> |
| </method> |
| </method-group> |
| </struct> |
| |
| <!-- proto::generator --> |
| <struct name="generator"> |
| <template> |
| <template-nontype-parameter name="Extends"> |
| <type>template< typename > class</type> |
| </template-nontype-parameter> |
| </template> |
| <purpose>A generator that wraps expressions passed to it in the specified extension wrapper.</purpose> |
| <description> |
| <para> |
| Generators are intended for use as the first template parameter to the |
| <computeroutput><classname alt="proto::domain">proto::domain<></classname></computeroutput> |
| class template and control if and how expressions within that domain are to be customized. |
| <computeroutput>proto::generator<></computeroutput> wraps each expression passed to it in |
| the <computeroutput>Extends<></computeroutput> wrapper. |
| </para> |
| </description> |
| <struct-specialization name="result"> |
| <template> |
| <template-type-parameter name="This"/> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <specialization> |
| <template-arg>This(Expr)</template-arg> |
| </specialization> |
| <typedef name="type"> |
| <type>Extends< Expr ></type> |
| </typedef> |
| </struct-specialization> |
| <method-group name="public member functions"> |
| <method name="operator()" cv="const"> |
| <type>Extends< Expr ></type> |
| <template> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <parameter name="expr"> |
| <paramtype>Expr const &</paramtype> |
| <description> |
| <para>A Proto expression</para> |
| </description> |
| </parameter> |
| <returns> |
| <para><computeroutput>Extends<Expr>(expr)</computeroutput></para> |
| </returns> |
| </method> |
| </method-group> |
| </struct> |
| |
| <!-- proto::pod_generator --> |
| <struct name="pod_generator"> |
| <template> |
| <template-nontype-parameter name="Extends"> |
| <type>template< typename > class</type> |
| </template-nontype-parameter> |
| </template> |
| <purpose>A generator that wraps expressions passed to it in the specified extension wrapper and uses aggregate initialization for the wrapper. </purpose> |
| <description> |
| <para> |
| Generators are intended for use as the first template parameter to the |
| <computeroutput><classname alt="proto::domain">proto::domain<></classname></computeroutput> |
| class template and control if and how expressions within that domain are to be customized. |
| <computeroutput>proto::pod_generator<></computeroutput> wraps each expression passed |
| to it in the <computeroutput>Extends<></computeroutput> wrapper, and uses aggregate |
| initialzation for the wrapped object. |
| </para> |
| </description> |
| <inherit> |
| <type><classname>proto::callable</classname></type> |
| </inherit> |
| <struct-specialization name="result"> |
| <template> |
| <template-type-parameter name="This"/> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <specialization> |
| <template-arg>This(Expr)</template-arg> |
| </specialization> |
| <typedef name="type"> |
| <type>Extends< Expr ></type> |
| </typedef> |
| </struct-specialization> |
| <method-group name="public member functions"> |
| <method name="operator()" cv="const"> |
| <type>Extends< Expr ></type> |
| <template> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <parameter name="expr"> |
| <paramtype>Expr const &</paramtype> |
| <description> |
| <para>A Proto expression</para> |
| </description> |
| </parameter> |
| <returns> |
| <para> |
| <computeroutput>Extends<Expr> that = {expr}; return that;</computeroutput> |
| </para> |
| </returns> |
| </method> |
| </method-group> |
| </struct> |
| |
| <!-- by_value_generator --> |
| <struct name="by_value_generator"> |
| <purpose>A generator that replaces child nodes held by reference with ones held by value. |
| Use with <computeroutput><classname alt="proto::compose_generators">proto::compose_generators<></classname> |
| </computeroutput> to forward that result to another generator. |
| </purpose> |
| <description> |
| <para> |
| Generators are intended for use as the first template parameter to the |
| <computeroutput><classname alt="proto::domain">proto::domain<></classname></computeroutput> |
| class template and control if and how expressions within that domain are to be customized. |
| <computeroutput>proto::by_value_generator</computeroutput> ensures all child nodes are held |
| by value. This generator is typically composed with a second generator for further processing, |
| as <computeroutput><classname>proto::compose_generators</classname><proto::by_value_generator, |
| MyGenerator></computeroutput>. |
| </para> |
| </description> |
| <inherit> |
| <type><classname>proto::callable</classname></type> |
| </inherit> |
| <struct-specialization name="result"> |
| <template> |
| <template-type-parameter name="This"/> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <specialization> |
| <template-arg>This(Expr)</template-arg> |
| </specialization> |
| <typedef name="type"> |
| <type><emphasis>unspecified</emphasis></type> |
| </typedef> |
| </struct-specialization> |
| <method-group name="public member functions"> |
| <method name="operator()" cv="const"> |
| <type><emphasis>unspecified</emphasis></type> |
| <template> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <parameter name="expr"> |
| <paramtype>Expr const &</paramtype> |
| <description> |
| <para>A Proto expression.</para> |
| </description> |
| </parameter> |
| <returns> |
| <para>Equivalent to <computeroutput><functionname>proto::deep_copy</functionname>(expr)</computeroutput></para> |
| </returns> |
| </method> |
| </method-group> |
| </struct> |
| |
| <!-- proto::compose_generator --> |
| <struct name="compose_generators"> |
| <template> |
| <template-type-parameter name="First"/> |
| <template-type-parameter name="Second"/> |
| </template> |
| <purpose>A composite generator that first applies one transform to an expression and then forwards |
| the result on to another generator for further transformation.</purpose> |
| <description> |
| <para> |
| Generators are intended for use as the first template parameter to the |
| <computeroutput><classname alt="proto::domain">proto::domain<></classname></computeroutput> |
| class template and control if and how expressions within that domain are to be customized. |
| <computeroutput>proto::compose_generators<></computeroutput> is a composite generator |
| that first applies one transform to an expression and then forwards the result on to another |
| generator for further transformation. |
| </para> |
| </description> |
| <inherit> |
| <type><classname>proto::callable</classname></type> |
| </inherit> |
| <struct-specialization name="result"> |
| <template> |
| <template-type-parameter name="This"/> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <specialization> |
| <template-arg>This(Expr)</template-arg> |
| </specialization> |
| <inherit> |
| <type> |
| boost::result_of< |
| Second(typename boost::result_of<First(Expr)>::type) |
| ></type> |
| </inherit> |
| </struct-specialization> |
| <method-group name="public member functions"> |
| <method name="operator()" cv="const"> |
| <type>typename boost::result_of< |
| Second(typename boost::result_of<First(Expr)>::type) |
| >::type</type> |
| <template> |
| <template-type-parameter name="Expr"/> |
| </template> |
| <parameter name="expr"> |
| <paramtype>Expr const &</paramtype> |
| <description> |
| <para>A Proto expression.</para> |
| </description> |
| </parameter> |
| <returns> |
| <para><computeroutput>Second()(First()(expr))</computeroutput></para> |
| </returns> |
| </method> |
| </method-group> |
| </struct> |
| |
| <!-- proto::use_basic_expr --> |
| <struct name="use_basic_expr"> |
| <template> |
| <template-type-parameter name="Generator"/> |
| </template> |
| <inherit> |
| <type>Generator</type> |
| </inherit> |
| <description> |
| <para> |
| Annotate a generator to indicate that it would |
| prefer to be passed instances of |
| <computeroutput><classname>proto::basic_expr</classname><></computeroutput> rather than |
| <computeroutput><classname>proto::expr</classname><></computeroutput>. |
| </para> |
| <para> |
| <computeroutput>use_basic_expr< Generator ></computeroutput> is itself a generator. |
| </para> |
| </description> |
| </struct> |
| |
| <!-- proto::wants_basic_expr --> |
| <struct name="wants_basic_expr"> |
| <template> |
| <template-type-parameter name="Generator"/> |
| </template> |
| <inherit> |
| <type>mpl::bool_< <replaceable>true-or-false</replaceable> ></type> |
| </inherit> |
| <description> |
| <para> |
| A Boolean metafunction that tests a generator to see whether |
| it would prefer to be passed instances of |
| <computeroutput><classname>proto::basic_expr</classname><></computeroutput> rather than |
| <computeroutput><classname>proto::expr</classname><></computeroutput>. |
| </para> |
| </description> |
| </struct> |
| |
| </namespace> |
| </namespace> |
| </header> |