blob: 1ae242ab46f30a1218f914ca067dd5cf00f5c080 [file] [log] [blame]
<?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>&lt;&gt;</computeroutput>,
<computeroutput><classname alt="boost::proto::pod_generator">proto::pod_generator</classname>&lt;&gt;</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&lt;&gt;</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 &amp;</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&lt; typename &gt; 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&lt;&gt;</classname></computeroutput>
class template and control if and how expressions within that domain are to be customized.
<computeroutput>proto::generator&lt;&gt;</computeroutput> wraps each expression passed to it in
the <computeroutput>Extends&lt;&gt;</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&lt; Expr &gt;</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>Extends&lt; Expr &gt;</type>
<template>
<template-type-parameter name="Expr"/>
</template>
<parameter name="expr">
<paramtype>Expr const &amp;</paramtype>
<description>
<para>A Proto expression</para>
</description>
</parameter>
<returns>
<para><computeroutput>Extends&lt;Expr&gt;(expr)</computeroutput></para>
</returns>
</method>
</method-group>
</struct>
<!-- proto::pod_generator -->
<struct name="pod_generator">
<template>
<template-nontype-parameter name="Extends">
<type>template&lt; typename &gt; 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&lt;&gt;</classname></computeroutput>
class template and control if and how expressions within that domain are to be customized.
<computeroutput>proto::pod_generator&lt;&gt;</computeroutput> wraps each expression passed
to it in the <computeroutput>Extends&lt;&gt;</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&lt; Expr &gt;</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>Extends&lt; Expr &gt;</type>
<template>
<template-type-parameter name="Expr"/>
</template>
<parameter name="expr">
<paramtype>Expr const &amp;</paramtype>
<description>
<para>A Proto expression</para>
</description>
</parameter>
<returns>
<para>
<computeroutput>Extends&lt;Expr&gt; 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&lt;&gt;</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&lt;&gt;</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>&lt;proto::by_value_generator,
MyGenerator&gt;</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 &amp;</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&lt;&gt;</classname></computeroutput>
class template and control if and how expressions within that domain are to be customized.
<computeroutput>proto::compose_generators&lt;&gt;</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&lt;
Second(typename boost::result_of&lt;First(Expr)&gt;::type)
&gt;</type>
</inherit>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename boost::result_of&lt;
Second(typename boost::result_of&lt;First(Expr)&gt;::type)
&gt;::type</type>
<template>
<template-type-parameter name="Expr"/>
</template>
<parameter name="expr">
<paramtype>Expr const &amp;</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>&lt;&gt;</computeroutput> rather than
<computeroutput><classname>proto::expr</classname>&lt;&gt;</computeroutput>.
</para>
<para>
<computeroutput>use_basic_expr&lt; Generator &gt;</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_&lt; <replaceable>true-or-false</replaceable> &gt;</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>&lt;&gt;</computeroutput> rather than
<computeroutput><classname>proto::expr</classname>&lt;&gt;</computeroutput>.
</para>
</description>
</struct>
</namespace>
</namespace>
</header>