]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/proto/doc/reference/context/default.xml
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / proto / doc / reference / context / default.xml
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/context/default.hpp">
10 <namespace name="boost">
11 <namespace name="proto">
12 <namespace name="context">
13 <struct name="default_eval">
14 <template>
15 <template-type-parameter name="Expr"/>
16 <template-type-parameter name="Context"/>
17 </template>
18 <purpose>
19 A BinaryFunction that accepts a Proto expression and a context, evaluates
20 each child expression with the context, and combines the result using the
21 standard C++ meaning for the operator represented by the current expression
22 node.
23 </purpose>
24 <description>
25 <para>
26 Let <computeroutput><computeroutput>OP</computeroutput></computeroutput> be the C++ operator
27 corresponding to <computeroutput>Expr::proto_tag</computeroutput>. (For example, if
28 <computeroutput>Tag</computeroutput> is <computeroutput>
29 <classname>proto::tag::plus</classname></computeroutput>, let <computeroutput>
30 <computeroutput>OP</computeroutput></computeroutput> be <computeroutput>+</computeroutput>.)
31 </para>
32 <para>
33 The behavior of this class is specified in terms of the C++0x <computeroutput>decltype</computeroutput>
34 keyword. In systems where this keyword is not available, Proto uses the Boost.Typeof library to
35 approximate the behavior.
36 </para>
37 </description>
38 <typedef name="Tag">
39 <purpose>For exposition only</purpose>
40 <type>typename Expr::tag_type</type>
41 </typedef>
42 <data-member name="s_expr" specifiers="static">
43 <purpose>For exposition only</purpose>
44 <type>Expr &amp;</type>
45 </data-member>
46 <data-member name="s_context" specifiers="static">
47 <purpose>For exposition only</purpose>
48 <type>Context &amp;</type>
49 </data-member>
50 <typedef name="result_type">
51 <type><emphasis>see-below</emphasis></type>
52 <description>
53 <itemizedlist>
54 <listitem>
55 <para>
56 If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
57 then the result type is
58 <programlisting>decltype(
59 OP <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(s_expr), s_context)
60 )</programlisting>
61 </para>
62 </listitem>
63 <listitem>
64 <para>
65 If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
66 then the result type is
67 <programlisting>decltype(
68 <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(s_expr), s_context) OP
69 )</programlisting>
70 </para>
71 </listitem>
72 <listitem>
73 <para>
74 If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
75 then the result type is
76 <programlisting>decltype(
77 <functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(s_expr), s_context) OP
78 <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(s_expr), s_context)
79 )</programlisting>
80 </para>
81 </listitem>
82 <listitem>
83 <para>
84 If <computeroutput>Tag</computeroutput> is <computeroutput>
85 <classname>proto::tag::subscript</classname>
86 </computeroutput>,
87 then the result type is
88 <programlisting>decltype(
89 <functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(s_expr), s_context) [
90 <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(s_expr), s_context) ]
91 )</programlisting>
92 </para>
93 </listitem>
94 <listitem>
95 <para>
96 If <computeroutput>Tag</computeroutput> is <computeroutput>
97 <classname>proto::tag::if_else_</classname>
98 </computeroutput>,
99 then the result type is
100 <programlisting>decltype(
101 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_context) ?
102 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_context) :
103 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;2&gt;(s_expr), s_context)
104 )</programlisting>
105 </para>
106 </listitem>
107 <listitem>
108 <para>
109 If <computeroutput>Tag</computeroutput> is <computeroutput>
110 <classname>proto::tag::function</classname>
111 </computeroutput>,
112 then the result type is
113 <programlisting>decltype(
114 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(s_expr), s_context) (
115 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(s_expr), s_context),
116 ...
117 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;N&gt;(s_expr), s_context) )
118 )</programlisting>
119 </para>
120 </listitem>
121 </itemizedlist>
122 </description>
123 </typedef>
124 <method-group name="public member functions">
125 <method name="operator()" cv="const">
126 <type>result_type</type>
127 <parameter name="expr">
128 <paramtype>Expr &amp;</paramtype>
129 <description>
130 <para>The current expression </para>
131 </description>
132 </parameter>
133 <parameter name="context">
134 <paramtype>Context &amp;</paramtype>
135 <description>
136 <para>The evaluation context </para>
137 </description>
138 </parameter>
139 <description>
140 <itemizedlist>
141 <listitem>
142 <para>
143 If <computeroutput>Tag</computeroutput> corresponds to a unary prefix operator,
144 then return
145 <programlisting>OP <functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(expr), context)</programlisting>
146 </para>
147 </listitem>
148 <listitem>
149 <para>
150 If <computeroutput>Tag</computeroutput> corresponds to a unary postfix operator,
151 then return
152 <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child</functionname>(expr), context) OP</programlisting>
153 </para>
154 </listitem>
155 <listitem>
156 <para>
157 If <computeroutput>Tag</computeroutput> corresponds to a binary infix operator,
158 then return
159 <programlisting><functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(expr), context) OP
160 <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(expr), context)</programlisting>
161 </para>
162 </listitem>
163 <listitem>
164 <para>
165 If <computeroutput>Tag</computeroutput> is <computeroutput>
166 <classname>proto::tag::subscript</classname>
167 </computeroutput>,
168 then return
169 <programlisting><functionname>proto::eval</functionname>(<functionname>proto::left</functionname>(expr), context) [
170 <functionname>proto::eval</functionname>(<functionname>proto::right</functionname>(expr), context) ]</programlisting>
171 </para>
172 </listitem>
173 <listitem>
174 <para>
175 If <computeroutput>Tag</computeroutput> is <computeroutput>
176 <classname>proto::tag::if_else_</classname>
177 </computeroutput>,
178 then return
179 <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), context) ?
180 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), context) :
181 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;2&gt;(expr), context)</programlisting>
182 </para>
183 </listitem>
184 <listitem>
185 <para>
186 If <computeroutput>Tag</computeroutput> is <computeroutput>
187 <classname>proto::tag::function</classname>
188 </computeroutput>,
189 then return
190 <programlisting><functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;0&gt;(expr), context) (
191 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;1&gt;(expr), context),
192 ...
193 <functionname>proto::eval</functionname>(<functionname>proto::child_c</functionname>&lt;N&gt;(expr), context) )</programlisting>
194 </para>
195 </listitem>
196 </itemizedlist>
197 </description>
198 </method>
199 </method-group>
200 </struct>
201
202 <struct name="default_context">
203 <purpose>An evaluation context that gives the operators their normal C++ semantics.</purpose>
204 <description>
205 <para>An evaluation context that gives the operators their normal C++ semantics.</para>
206 </description>
207 <struct name="eval">
208 <template>
209 <template-type-parameter name="Expr"/>
210 <template-type-parameter name="ThisContext">
211 <default>default_context const</default>
212 </template-type-parameter>
213 </template>
214 <inherit><classname>proto::context::default_eval</classname>&lt; Expr, ThisContext &gt;</inherit>
215 </struct>
216 </struct>
217 </namespace>
218 </namespace>
219 </namespace>
220 </header>