123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- Copyright 2012 Eric Niebler
- Distributed under the Boost
- Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- -->
- <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><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>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::basic_default_generator -->
- <struct name="basic_default_generator">
- <purpose>
- A simple generator that passes an expression through unchanged while stating
- a preference for <classname>proto::basic_expr</classname><> over
- <classname>proto::expr</classname><>.</purpose>
- <inherit>
- <type><classname>proto::use_basic_expr</classname>< <classname>proto::default_generator</classname> ></type>
- </inherit>
- </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>
|