blob: 053a9770b032d61a6e7e2e1d6e1aa4f4a4faff6f [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<header name="boost/proto/transform/arg.hpp">
<para>Contains definition of the childN transforms and friends.</para>
<namespace name="boost">
<namespace name="proto">
<struct name="_expr">
<inherit><classname>proto::transform</classname>&lt; _expr &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current expression unmodified. </purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
<classname>proto::terminal</classname>&lt;int&gt;::type &amp; j = proto::_expr()(i);
assert( boost::addressof(i) == boost::addressof(j) );</programlisting>
</para>
</description>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>Expr</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>Expr</type>
<parameter name="expr">
<paramtype>typename impl::expr_param</paramtype>
<description>
<para>The current expression. </para>
</description>
</parameter>
<parameter name="">
<paramtype>typename impl::state_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::data_param</paramtype>
</parameter>
<description>
<para>
Returns the current expression.
</para>
</description>
<returns>
<para>
<computeroutput>expr</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_state">
<inherit><classname>proto::transform</classname>&lt; _state &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current state unmodified. </purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
char ch = proto::_state()(i, 'a');
assert( ch == 'a' );</programlisting>
</para>
</description>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>State</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>State</type>
<parameter name="">
<paramtype>typename impl::expr_param</paramtype>
</parameter>
<parameter name="state">
<paramtype>typename impl::state_param</paramtype>
<description>
<para>The current state. </para>
</description>
</parameter>
<parameter name="">
<paramtype>typename impl::data_param</paramtype>
</parameter>
<description>
<para>
Returns the current state.
</para>
</description>
<returns>
<para>
<computeroutput>state</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_data">
<inherit><classname>proto::transform</classname>&lt; _data &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the current data unmodified. </purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
std::string str("hello");
std::string &amp; data = proto::_data()(i, 'a', str);
assert( &amp;str == &amp;data );</programlisting>
</para>
</description>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>Data</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>Data</type>
<parameter name="">
<paramtype>typename impl::expr_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::state_param</paramtype>
</parameter>
<parameter name="data">
<paramtype>typename impl::data_param</paramtype>
<description>
<para>The current data. </para>
</description>
</parameter>
<description>
<para>
Returns the current data.
</para>
</description>
<returns>
<para>
<computeroutput>data</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_child_c">
<template>
<template-nontype-parameter name="N">
<type>int</type>
</template-nontype-parameter>
</template>
<inherit><classname>proto::transform</classname>&lt; _child_c&lt;N&gt; &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that returns N-th child of the current expression. </purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
<classname>proto::terminal</classname>&lt;int&gt;::type &amp; j = proto::_child_c&lt;0&gt;()(-i);
assert( boost::addressof(i) == boost::addressof(j) );</programlisting>
</para>
</description>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>typename <classname>proto::result_of::child_c</classname>&lt; Expr, N &gt;::type</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename <classname>proto::result_of::child_c</classname>&lt; Expr, N &gt;::type</type>
<parameter name="expr">
<paramtype>typename impl::expr_param</paramtype>
<description>
<para>The current expression. </para>
</description>
</parameter>
<parameter name="">
<paramtype>typename impl::state_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::data_param</paramtype>
</parameter>
<description>
<para>
Returns the N-th child of <computeroutput>expr</computeroutput>
</para>
</description>
<requires>
<para>
<computeroutput>Expr::proto_arity::value &gt; N</computeroutput>
</para>
</requires>
<returns>
<para>
<computeroutput><functionname>proto::child_c</functionname>&lt;N&gt;(expr)</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_value">
<inherit><classname>proto::transform</classname>&lt; _value &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that returns the value of the current terminal expression. </purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
int j = proto::_value()(i);
assert( 42 == j );</programlisting>
</para>
</description>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>typename <classname>proto::result_of::value</classname>&lt; Expr &gt;::type</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename <classname>proto::result_of::value</classname>&lt; Expr &gt;::type</type>
<parameter name="expr">
<paramtype>typename impl::expr_param</paramtype>
<description>
<para>The current expression. </para>
</description>
</parameter>
<parameter name="">
<paramtype>typename impl::state_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::data_param</paramtype>
</parameter>
<description>
<para>
Returns the value of the specified terminal expression.
</para>
</description>
<requires>
<para>
<computeroutput>Expr::proto_arity::value == 0</computeroutput>.
</para>
</requires>
<returns>
<para>
<computeroutput><functionname>proto::value</functionname>(expr)</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_void">
<inherit><classname>proto::transform</classname>&lt; _void &gt;</inherit>
<purpose>A <conceptname>PrimitiveTransform</conceptname> that does nothing and returns void. </purpose>
<struct name="impl">
<template>
<template-type-parameter name="Expr"/>
<template-type-parameter name="State"/>
<template-type-parameter name="Data"/>
</template>
<inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
<typedef name="result_type">
<type>void</type>
</typedef>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>void</type>
<parameter name="">
<paramtype>typename impl::expr_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::state_param</paramtype>
</parameter>
<parameter name="">
<paramtype>typename impl::data_param</paramtype>
</parameter>
<description>
<para>
Does nothing.
</para>
</description>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
</method-group>
</struct>
</struct>
<struct name="_byref">
<inherit><classname>proto::callable</classname></inherit>
<purpose>A unary callable <conceptname>PolymorphicFunctionObject</conceptname> that wraps its argument
in a <computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput>.</purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
boost::reference_wrapper&lt;<classname>proto::terminal</classname>&lt;int&gt;::type&gt; j
= <classname>proto::when</classname>&lt;<classname>proto::_</classname>, proto::_byref(_)&gt;()(i);
assert( boost::addressof(i) == boost::addressof(j.get()) );</programlisting>
</para>
</description>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="T"/>
</template>
<specialization>
<template-arg>This(T &amp;)</template-arg>
</specialization>
<typedef name="type">
<type>boost::reference_wrapper&lt; T &gt; const</type>
</typedef>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="T"/>
</template>
<specialization>
<template-arg>This(T)</template-arg>
</specialization>
<typedef name="type">
<type>boost::reference_wrapper&lt; T const &gt; const</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>boost::reference_wrapper&lt; T &gt; const</type>
<template>
<template-type-parameter name="T"/>
</template>
<parameter name="t">
<paramtype>T &amp;</paramtype>
<description>
<para>The object to wrap </para>
</description>
</parameter>
<description>
<para>
Wrap the parameter <computeroutput>t</computeroutput> in a
<computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput>
</para>
</description>
<returns>
<para>
<computeroutput>boost::ref(t)</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
<method name="operator()" cv="const">
<type>boost::reference_wrapper&lt; T const &gt; const</type>
<template>
<template-type-parameter name="T"/>
</template>
<parameter name="t">
<paramtype>T const &amp;</paramtype>
</parameter>
<description>
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
</description>
</method>
</method-group>
</struct>
<struct name="_byval">
<inherit><classname>proto::callable</classname></inherit>
<purpose>
A unary callable <conceptname>PolymorphicFunctionObject</conceptname> that strips references and
<computeroutput>boost::reference_wrapper&lt;&gt;</computeroutput> from its argument.
</purpose>
<description>
<para>
Example:
<programlisting><classname>proto::terminal</classname>&lt;int&gt;::type i = {42};
int j = 67;
int k = <classname>proto::when</classname>&lt;<classname>proto::_</classname>, proto::_byval(<classname>proto::_state</classname>)&gt;()(i, boost::ref(j));
assert( 67 == k );</programlisting>
</para>
</description>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="T"/>
</template>
<specialization>
<template-arg>This(boost::reference_wrapper&lt; T &gt;)</template-arg>
</specialization>
<inherit>result&lt;This(T)&gt;</inherit>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="T"/>
</template>
<specialization>
<template-arg>This(T &amp;)</template-arg>
</specialization>
<inherit>result&lt;This(T)&gt;</inherit>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="T"/>
</template>
<specialization>
<template-arg>This(T)</template-arg>
</specialization>
<typedef name="type">
<type>T</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>T</type>
<template>
<template-type-parameter name="T"/>
</template>
<parameter name="t">
<paramtype>T const &amp;</paramtype>
<description>
<para>The object to unref </para>
</description>
</parameter>
<returns>
<para>
<computeroutput>t</computeroutput>
</para>
</returns>
<throws>
<simpara>Will not throw.</simpara>
</throws>
</method>
<method name="operator()" cv="const">
<type>T</type>
<template>
<template-type-parameter name="T"/>
</template>
<parameter name="t">
<paramtype>boost::reference_wrapper&lt; T &gt; const &amp;</paramtype>
</parameter>
<description>
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
</description>
</method>
</method-group>
</struct>
</namespace>
</namespace>
</header>