]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/phoenix/doc/html/phoenix/lazy_list/implementation_details.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / phoenix / doc / html / phoenix / lazy_list / implementation_details.html
CommitLineData
7c673cae
FG
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4<title>Implementation Details</title>
5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
7<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Phoenix 3.2.0">
8<link rel="up" href="../lazy_list.html" title="Lazy List">
9<link rel="prev" href="exceptions.html" title="Exceptions">
10<link rel="next" href="testing.html" title="Testing">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="exceptions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../lazy_list.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="testing.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="phoenix.lazy_list.implementation_details"></a><a class="link" href="implementation_details.html" title="Implementation Details">Implementation
28 Details</a>
29</h3></div></div></div>
30<h3>
31<a name="phoenix.lazy_list.implementation_details.h0"></a>
32 <span><a name="phoenix.lazy_list.implementation_details.introduction"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.introduction">Introduction</a>
33 </h3>
34<p>
35 The implementation has depended on close study of the existing code of <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a>. The <a href="http://people.cs.umass.edu/~yannis/fc++/New/new_list_implementation.html" target="_top">FC++
36 List Implementation</a> is a carefully crafted code which allows for
37 efficient processing of a number of different cases. In particular it makes
38 use of the <a href="http://people.cs.umass.edu/~yannis/fc++/New/reusers.html" target="_top">FC++
39 Reuser Implementation</a> for processing of repetitive evaluations.
40 </p>
41<p>
42 <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a> uses a combination
43 of polymorphic and single type functions which can be passed as arguments
44 to other functions.
45 </p>
46<p>
47 The implementation of list&lt;T&gt; has needed new implementations of the
48 strategy using the facilities of Boost Phoenix and also Boost Function. It
49 turns out that a combination of both can be used to meet the needs of list&lt;T&gt;.
50 </p>
51<p>
52 The fact that the functions are defined by boost::phoenix::function means
53 that they work with phoenix arguments such as 'arg1'. This is the fact which
54 ensures the flexibility needed for the user to build new functions as needed.
55 </p>
56<h3>
57<a name="phoenix.lazy_list.implementation_details.h1"></a>
58 <span><a name="phoenix.lazy_list.implementation_details.fc___legacy"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.fc___legacy">FC++ legacy</a>
59 </h3>
60<p>
61 The <a href="http://people.cs.umass.edu/~yannis/fc++/New/new_list_implementation.html" target="_top">FC++
62 List Implementation</a> and the <a href="http://people.cs.umass.edu/~yannis/fc++/New/reusers.html" target="_top">FC++
63 Reuser Implementation</a> have been followed very closely in building
64 this code. The version used as the starting point was the <a href="http://cgi.di.uoa.gr/~smaragd/fc++/boostpaper/" target="_top">Boost
65 FC++</a> version.
66 </p>
67<h3>
68<a name="phoenix.lazy_list.implementation_details.h2"></a>
69 <span><a name="phoenix.lazy_list.implementation_details.polymorphic_function_types"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.polymorphic_function_types">Polymorphic
70 Function Types</a>
71 </h3>
72<p>
73 Functions are implemented as a struct within namespace impl. For an example
74 funcion 'x' the type is defined like this:
75 </p>
76<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">X</span><span class="special">&gt;</span> <span class="identifier">X</span><span class="special">;</span>
77<span class="identifier">X</span> <span class="identifier">x</span>
78</pre>
79<p>
80 This alternative will work to provide a function 'x' but it is not then possible
81 to pass it as an argument.
82 </p>
83<pre class="programlisting"><span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">impl</span><span class="special">::</span><span class="identifier">X</span><span class="special">,</span> <span class="number">1</span><span class="special">)</span>
84</pre>
85<h4>
86<a name="phoenix.lazy_list.implementation_details.h3"></a>
87 <span><a name="phoenix.lazy_list.implementation_details.implementation_example"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.implementation_example">Implementation
88 Example</a>
89 </h4>
90<p>
91 This example implements id() which simply returns its argument:
92 </p>
93<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">impl</span> <span class="special">{</span>
94
95 <span class="keyword">struct</span> <span class="identifier">Id</span>
96 <span class="special">{</span>
97 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sig</span><span class="special">&gt;</span>
98 <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">;</span>
99
100 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">&gt;</span>
101 <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">&lt;</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">A0</span><span class="special">)&gt;</span>
102 <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_reference</span><span class="special">&lt;</span><span class="identifier">A0</span><span class="special">&gt;</span>
103 <span class="special">{};</span>
104
105 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">&gt;</span>
106 <span class="identifier">A0</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">A0</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">a0</span><span class="special">)</span> <span class="keyword">const</span>
107 <span class="special">{</span>
108 <span class="keyword">return</span> <span class="identifier">a0</span><span class="special">;</span>
109 <span class="special">}</span>
110
111 <span class="special">};</span>
112
113<span class="special">}</span>
114
115<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">Id</span><span class="special">&gt;</span> <span class="identifier">Id</span><span class="special">;</span>
116<span class="identifier">Id</span> <span class="identifier">id</span><span class="special">;</span>
117</pre>
118<h3>
119<a name="phoenix.lazy_list.implementation_details.h4"></a>
120 <span><a name="phoenix.lazy_list.implementation_details.functions_with_defined_return_type"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.functions_with_defined_return_type">Functions
121 with defined return type</a>
122 </h3>
123<p>
124 Sometimes it is necessary to define a function using a templated struct,
125 where the template parameter type defines the return type.
126 </p>
127<h4>
128<a name="phoenix.lazy_list.implementation_details.h5"></a>
129 <span><a name="phoenix.lazy_list.implementation_details.example_with_one_argument"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.example_with_one_argument">Example
130 with one argument</a>
131 </h4>
132<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">impl</span> <span class="special">{</span>
133
134 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Result</span><span class="special">&gt;</span>
135 <span class="keyword">struct</span> <span class="identifier">what</span> <span class="special">{</span>
136
137 <span class="keyword">typedef</span> <span class="identifier">Result</span> <span class="identifier">result_type</span><span class="special">;</span>
138
139 <span class="identifier">Result</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Result</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span> <span class="keyword">const</span>
140 <span class="special">{</span>
141 <span class="keyword">return</span> <span class="identifier">r</span><span class="special">;</span>
142 <span class="special">}</span>
143 <span class="special">};</span>
144
145<span class="special">}</span>
146
147<span class="identifier">boost</span><span class="special">::</span><span class="identifier">function1</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span> <span class="special">&gt;</span> <span class="identifier">what_int</span> <span class="special">=</span> <span class="identifier">impl</span><span class="special">::</span><span class="identifier">what</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;();</span>
148<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function1</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">fun1_int_int</span><span class="special">;</span>
149<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">fun1_int_int</span><span class="special">&gt;</span> <span class="identifier">What_arg</span><span class="special">;</span>
150<span class="identifier">What_arg</span> <span class="identifier">what_arg</span><span class="special">(</span><span class="identifier">what_int</span><span class="special">);</span>
151</pre>
152<h4>
153<a name="phoenix.lazy_list.implementation_details.h6"></a>
154 <span><a name="phoenix.lazy_list.implementation_details.example_with_zero_arguments"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.example_with_zero_arguments">Example
155 with zero arguments</a>
156 </h4>
157<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">impl</span> <span class="special">{</span>
158 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Result</span><span class="special">&gt;</span>
159 <span class="keyword">struct</span> <span class="identifier">what0</span> <span class="special">{</span>
160
161 <span class="keyword">typedef</span> <span class="identifier">Result</span> <span class="identifier">result_type</span><span class="special">;</span>
162
163 <span class="identifier">Result</span> <span class="keyword">operator</span><span class="special">()()</span> <span class="keyword">const</span>
164 <span class="special">{</span>
165 <span class="keyword">return</span> <span class="identifier">Result</span><span class="special">(</span><span class="number">100</span><span class="special">);</span>
166 <span class="special">}</span>
167
168 <span class="special">};</span>
169<span class="special">}</span>
170
171<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function0</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">fun0_int</span><span class="special">;</span>
172<span class="identifier">boost</span><span class="special">::</span><span class="identifier">function0</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">what0_int</span> <span class="special">=</span> <span class="identifier">impl</span><span class="special">::</span><span class="identifier">what0</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;();</span>
173<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">fun0_int</span><span class="special">&gt;</span> <span class="identifier">What0_arg</span><span class="special">;</span>
174<span class="identifier">What0_arg</span> <span class="identifier">what0_arg</span><span class="special">(</span><span class="identifier">what0_int</span><span class="special">);</span>
175</pre>
176<h3>
177<a name="phoenix.lazy_list.implementation_details.h7"></a>
178 <span><a name="phoenix.lazy_list.implementation_details.list_generation_implementation"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.list_generation_implementation">List
179 Generation Implementation</a>
180 </h3>
181<p>
182 The implementation of the function
183 </p>
184<pre class="programlisting"><span class="identifier">enum_from</span><span class="special">(</span><span class="number">1</span><span class="special">)</span>
185</pre>
186<p>
187 requires a functor which will evaluate the successive numbers on demand.
188 The code from <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a>
189 has been reimplemented using internal functors as follows.
190 </p>
191<p>
192 This code has to carefully manipulate the input type T to construct the result
193 type which is a list.
194 </p>
195<p>
196 The code in EFH is used to build a series of objects which each add one element
197 to the list and return the function which will add the next element. That
198 only gets called when it is needed.
199 </p>
200<pre class="programlisting"> <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
201 <span class="keyword">struct</span> <span class="identifier">EFH</span>
202 <span class="special">{</span>
203 <span class="keyword">mutable</span> <span class="identifier">T</span> <span class="identifier">x</span><span class="special">;</span>
204 <span class="identifier">EFH</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">xx</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">xx</span><span class="special">)</span> <span class="special">{}</span>
205 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sig</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">;</span>
206
207 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TT</span><span class="special">&gt;</span>
208 <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">&lt;</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">TT</span><span class="special">)&gt;</span>
209 <span class="special">{</span>
210 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">UseList</span><span class="special">::</span><span class="keyword">template</span>
211 <span class="identifier">List</span><span class="special">&lt;</span><span class="identifier">TT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">LType</span><span class="special">;</span>
212 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span>
213 <span class="identifier">ListType</span><span class="special">&lt;</span><span class="identifier">LType</span><span class="special">&gt;::</span><span class="identifier">delay_result_type</span> <span class="identifier">type</span><span class="special">;</span>
214 <span class="special">};</span>
215 <span class="keyword">typename</span> <span class="identifier">result</span><span class="special">&lt;</span><span class="identifier">EFH</span><span class="special">(</span><span class="identifier">T</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="keyword">operator</span><span class="special">()()</span> <span class="keyword">const</span> <span class="special">{</span>
216 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">UseList</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">List</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">LType</span><span class="special">;</span>
217 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">ListType</span><span class="special">&lt;</span><span class="identifier">LType</span><span class="special">&gt;::</span>
218 <span class="identifier">delay_result_type</span> <span class="identifier">result_type</span><span class="special">;</span>
219 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function0</span><span class="special">&lt;</span><span class="identifier">result_type</span><span class="special">&gt;</span> <span class="identifier">fun1_R_TTT</span><span class="special">;</span>
220 <span class="special">++</span><span class="identifier">x</span><span class="special">;</span>
221 <span class="identifier">fun1_R_TTT</span> <span class="identifier">efh_R_TTT</span> <span class="special">=</span> <span class="identifier">EFH</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">);</span>
222 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">fun1_R_TTT</span><span class="special">&gt;</span> <span class="identifier">EFH_R_T</span><span class="special">;</span>
223 <span class="identifier">EFH_R_T</span> <span class="identifier">efh_R_T</span><span class="special">(</span><span class="identifier">efh_R_TTT</span><span class="special">);</span>
224<span class="preprocessor">#ifndef</span> <span class="identifier">BOOST_PHOENIX_NO_LAZY_EXCEPTIONS</span>
225 <span class="keyword">if</span> <span class="special">(</span><span class="identifier">x</span> <span class="special">&gt;</span> <span class="identifier">BOOST_PHOENIX_FUNCTION_MAX_LAZY_LIST_LENGTH</span><span class="special">)</span>
226 <span class="keyword">throw</span> <span class="identifier">lazy_exception</span><span class="special">(</span><span class="string">"Running away in EFH!!"</span><span class="special">);</span>
227<span class="preprocessor">#endif</span>
228 <span class="keyword">return</span> <span class="identifier">cons</span><span class="special">(</span> <span class="identifier">x</span><span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="identifier">efh_R_T</span><span class="special">()</span> <span class="special">);</span>
229 <span class="special">}</span>
230 <span class="special">};</span>
231
232 <span class="keyword">struct</span> <span class="identifier">Enum_from</span> <span class="special">{</span>
233 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sig</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">;</span>
234
235 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
236 <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">&lt;</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">T</span><span class="special">)&gt;</span>
237 <span class="special">{</span>
238 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_reference</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">TT</span><span class="special">;</span>
239 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_const</span><span class="special">&lt;</span><span class="identifier">TT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">TTT</span><span class="special">;</span>
240 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">UseList</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">List</span><span class="special">&lt;</span><span class="identifier">TTT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">LType</span><span class="special">;</span>
241 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">ListType</span><span class="special">&lt;</span><span class="identifier">LType</span><span class="special">&gt;::</span>
242 <span class="identifier">delay_result_type</span> <span class="identifier">type</span><span class="special">;</span>
243 <span class="special">};</span>
244
245 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
246 <span class="keyword">typename</span> <span class="identifier">result</span><span class="special">&lt;</span><span class="identifier">Enum_from</span><span class="special">(</span><span class="identifier">T</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="keyword">operator</span><span class="special">()</span>
247 <span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span> <span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span>
248 <span class="special">{</span>
249 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_reference</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">TT</span><span class="special">;</span>
250 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_const</span><span class="special">&lt;</span><span class="identifier">TT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">TTT</span><span class="special">;</span>
251 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">UseList</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">List</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">LType</span><span class="special">;</span>
252 <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">ListType</span><span class="special">&lt;</span><span class="identifier">LType</span><span class="special">&gt;::</span>
253 <span class="identifier">delay_result_type</span> <span class="identifier">result_type</span><span class="special">;</span>
254 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function0</span><span class="special">&lt;</span><span class="identifier">result_type</span><span class="special">&gt;</span> <span class="identifier">fun1_R_TTT</span><span class="special">;</span>
255 <span class="identifier">fun1_R_TTT</span> <span class="identifier">efh_R_TTT</span> <span class="special">=</span> <span class="identifier">EFH</span><span class="special">&lt;</span><span class="identifier">TTT</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">);</span>
256 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">function</span><span class="special">&lt;</span><span class="identifier">fun1_R_TTT</span><span class="special">&gt;</span> <span class="identifier">EFH_R_T</span><span class="special">;</span>
257 <span class="identifier">EFH_R_T</span> <span class="identifier">efh_R_T</span><span class="special">(</span><span class="identifier">efh_R_TTT</span><span class="special">);</span>
258 <span class="comment">//std::cout &lt;&lt; "enum_from (" &lt;&lt; x &lt;&lt; ")" &lt;&lt; std::endl;</span>
259 <span class="keyword">return</span> <span class="identifier">efh_R_T</span><span class="special">();</span>
260 <span class="special">}</span>
261 <span class="special">};</span>
262</pre>
263<p>
264 Similar code is used in the related functors
265 </p>
266<pre class="programlisting"><span class="identifier">enum_from_to</span>
267<span class="identifier">filter</span>
268</pre>
269<h3>
270<a name="phoenix.lazy_list.implementation_details.h8"></a>
271 <span><a name="phoenix.lazy_list.implementation_details.conclusion"></a></span><a class="link" href="implementation_details.html#phoenix.lazy_list.implementation_details.conclusion">Conclusion</a>
272 </h3>
273<p>
274 These implementation mechanisms have been carried through consistently in
275 the implementation.
276 </p>
277</div>
278<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
279<td align="left"></td>
280<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2005, 2010, 2014, 2015 Joel de Guzman, Dan Marsden, Thomas
281 Heller, John Fletcher<p>
282 Distributed under the Boost Software License, Version 1.0. (See accompanying
283 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
284 </p>
285</div></td>
286</tr></table>
287<hr>
288<div class="spirit-nav">
289<a accesskey="p" href="exceptions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../lazy_list.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="testing.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
290</div>
291</body>
292</html>