]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/proto/doc/reference/transform/lazy.xml
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / proto / doc / reference / transform / lazy.xml
CommitLineData
7c673cae
FG
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright 2012 Eric Niebler
4
5 Distributed under the Boost
6 Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 -->
9<header name="boost/proto/transform/lazy.hpp">
10 <para>
11 Contains definition of the
12 <computeroutput>
13 <classname alt="boost::proto::lazy">proto::lazy&lt;&gt;</classname>
14 </computeroutput> transform.
15 </para>
16 <namespace name="boost">
17 <namespace name="proto">
18 <struct name="lazy">
19 <template>
20 <template-type-parameter name="T"/>
21 </template>
22 <inherit><classname>proto::transform</classname>&lt; lazy&lt;T&gt; &gt;</inherit>
23 <purpose>A <conceptname>PrimitiveTransform</conceptname> that uses
24 <computeroutput><classname>proto::make&lt;&gt;</classname></computeroutput> to build a
25 <conceptname>CallableTransform</conceptname>, and then uses
26 <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput> to apply it.
27 </purpose>
28 <description>
29 <para>
30 <computeroutput>proto::lazy&lt;&gt;</computeroutput> is useful as a higher-order transform,
31 when the transform to be applied depends on the current state of the transformation. The
32 invocation of the <computeroutput>
33 <classname>proto::make&lt;&gt;</classname>
34 </computeroutput> transform evaluates any nested transforms, and the resulting type is treated
35 as a <conceptname>CallableTransform</conceptname>, which is evaluated with
36 <computeroutput><classname>proto::call&lt;&gt;</classname></computeroutput>.
37 </para>
38 <para>
39 For the full description of the behavior of the
40 <computeroutput>
41 <classname>proto::lazy&lt;&gt;</classname>
42 </computeroutput>
43 transform, see the documentation for the nested
44 <computeroutput>
45 <classname>proto::lazy::impl&lt;&gt;</classname>
46 </computeroutput>
47 class template.
48 </para>
49 </description>
50 <struct name="impl">
51 <template>
52 <template-type-parameter name="Expr"/>
53 <template-type-parameter name="State"/>
54 <template-type-parameter name="Data"/>
55 </template>
56 <inherit><type><classname>proto::transform_impl</classname>&lt;Expr, State, Data&gt;</type></inherit>
57 <typedef name="result_type">
58 <type><replaceable>see-below</replaceable></type>
59 <description>
60 <para>
61 <computeroutput><classname>proto::lazy</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::result_type</computeroutput>
62 is calculated as follows:
63 <itemizedlist>
64 <listitem>
65 <para>
66 If <computeroutput>T</computeroutput> if of the form
67 <computeroutput>O(A<subscript>0</subscript>,…A<subscript>n</subscript>)</computeroutput>, then let <computeroutput>O'</computeroutput>
68 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput>
69 and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,…A<subscript>n</subscript>)</computeroutput>.
70 </para>
71 </listitem>
72 <listitem>
73 <para>
74 If <computeroutput>T</computeroutput> if of the form
75 <computeroutput>O(A<subscript>0</subscript>,…A<subscript>n</subscript> ...)</computeroutput>, then let <computeroutput>O'</computeroutput>
76 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput>
77 and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,…A<subscript>n</subscript> ...)</computeroutput>.
78 </para>
79 </listitem>
80 <listitem>
81 <para>
82 Otherwise, let <computeroutput>T'</computeroutput>
83 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;T&gt;(Expr, State, Data)&gt;::type</computeroutput>.
84 </para>
85 </listitem>
86 </itemizedlist>
87 <para>
88 The result type is
89 <computeroutput>
90 boost::result_of&lt;<classname>proto::call</classname>&lt;T'&gt;(Expr, State, Data)&gt;::type
91 </computeroutput>.
92 </para>
93 </para>
94 </description>
95 </typedef>
96 <method-group name="public member functions">
97 <method name="operator()" cv="const">
98 <type>result_type</type>
99 <parameter name="expr">
100 <paramtype>typename impl::expr_param</paramtype>
101 </parameter>
102 <parameter name="state">
103 <paramtype>typename impl::state_param</paramtype>
104 </parameter>
105 <parameter name="data">
106 <paramtype>typename impl::data_param</paramtype>
107 </parameter>
108 <description>
109 <para>
110 <computeroutput><classname>proto::lazy</classname>&lt;T&gt;::impl&lt;Expr,State,Data&gt;::operator()</computeroutput> behaves as follows:
111 <itemizedlist>
112 <listitem>
113 <para>
114 If <computeroutput>T</computeroutput> if of the form
115 <computeroutput>O(A<subscript>0</subscript>,…A<subscript>n</subscript>)</computeroutput>, then let <computeroutput>O'</computeroutput>
116 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput>
117 and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,…A<subscript>n</subscript>)</computeroutput>.
118 </para>
119 </listitem>
120 <listitem>
121 <para>
122 If <computeroutput>T</computeroutput> if of the form
123 <computeroutput>O(A<subscript>0</subscript>,…A<subscript>n</subscript> ...)</computeroutput>, then let <computeroutput>O'</computeroutput>
124 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;O&gt;(Expr, State, Data)&gt;::type</computeroutput>
125 and let <computeroutput>T'</computeroutput> be <computeroutput>O'(A<subscript>0</subscript>,…A<subscript>n</subscript> ...)</computeroutput>.
126 </para>
127 </listitem>
128 <listitem>
129 <para>
130 Otherwise, let <computeroutput>T'</computeroutput>
131 be <computeroutput>boost::result_of&lt;<classname>proto::make</classname>&lt;T&gt;(Expr, State, Data)&gt;::type</computeroutput>.
132 </para>
133 </listitem>
134 </itemizedlist>
135 </para>
136 </description>
137 <returns>
138 <para>
139 <computeroutput>
140 <classname>proto::call</classname>&lt;T'&gt;()(expr, state, data)
141 </computeroutput>
142 </para>
143 </returns>
144 </method>
145 </method-group>
146 </struct>
147 </struct>
148 </namespace>
149 </namespace>
150</header>