327 lines
14 KiB
XML
327 lines
14 KiB
XML
<?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>
|