• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" ?>
2<!--
3  Copyright 2008 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<concept name="PrimitiveTransform" category="utility">
10  <param name="Fn" role="primitive-transform-type" />
11  <param name="Expr" role="expression-type" />
12  <param name="State" role="state-type" />
13  <param name="Data" role="data-type" />
14
15  <models-sentence>
16    The type <arg num="1" /> must be a model of <self/>.
17  </models-sentence>
18
19  <description>
20    <para>
21      A PrimitiveTransform is a class type that
22      has a nested class template called
23      <computeroutput>impl&lt;&gt;</computeroutput> that takes
24      three template parameters representing an expression
25      type, a state type and a data type. Specializations
26      of the nested impl template are ternary monomorphic
27      function objects that accept expression, state, and
28      data parameters. A PrimitiveTransform is also a
29      <conceptname>PolymorphicFunctionObject</conceptname>
30      implemented in terms of the nested
31      <computeroutput>impl&lt;&gt;</computeroutput> template.
32    </para>
33  </description>
34
35  <notation variables="fn">
36    <sample-value>
37      <type name="Fn" />
38    </sample-value>
39  </notation>
40
41  <notation variables="expr">
42    <sample-value>
43      <type name="Expr" />
44    </sample-value>
45  </notation>
46
47  <notation variables="state">
48    <sample-value>
49      <type name="State" />
50    </sample-value>
51  </notation>
52
53  <notation variables="data">
54    <sample-value>
55      <type name="Data" />
56    </sample-value>
57  </notation>
58
59  <associated-type name="result_type">
60    <get-member-type name="result_type">
61      <apply-template name="typename Fn::template impl">
62        <type name="Expr"/>
63        <type name="State"/>
64        <type name="Data"/>
65      </apply-template>
66    </get-member-type>
67    <description>
68      <simpara>The return type of the overloaded function call operator.</simpara>
69    </description>
70  </associated-type>
71
72  <valid-expression name="Polymorphic Function Call 1">
73    <apply-function name="fn">
74      <sample-value>
75        <type name="Expr" />
76      </sample-value>
77    </apply-function>
78    <return-type>
79      <require-same-type testable="yes">
80        <type name="result_type"/>
81      </require-same-type>
82    </return-type>
83    <semantics>Applies the transform.</semantics>
84  </valid-expression>
85
86  <valid-expression name="Polymorphic Function Call 2">
87    <apply-function name="fn">
88      <sample-value>
89        <type name="Expr" />
90      </sample-value>
91      <sample-value>
92        <type name="State" />
93      </sample-value>
94    </apply-function>
95    <return-type>
96      <require-same-type testable="yes">
97        <type name="result_type"/>
98      </require-same-type>
99    </return-type>
100    <semantics>Applies the transform.</semantics>
101  </valid-expression>
102
103  <valid-expression name="Polymorphic Function Call 3">
104    <apply-function name="fn">
105      <sample-value>
106        <type name="Expr" />
107      </sample-value>
108      <sample-value>
109        <type name="State" />
110      </sample-value>
111      <sample-value>
112        <type name="Data" />
113      </sample-value>
114    </apply-function>
115    <return-type>
116      <require-same-type testable="yes">
117        <type name="result_type"/>
118      </require-same-type>
119    </return-type>
120    <semantics>Applies the transform.</semantics>
121  </valid-expression>
122
123  <valid-expression name="Monomorphic Function Call">
124    <apply-function name="typename Fn::template impl&lt; Expr, State, Data &gt;()">
125      <sample-value>
126        <type name="Expr" />
127      </sample-value>
128      <sample-value>
129        <type name="State" />
130      </sample-value>
131      <sample-value>
132        <type name="Data" />
133      </sample-value>
134    </apply-function>
135    <return-type>
136      <require-same-type testable="yes">
137        <type name="result_type"/>
138      </require-same-type>
139    </return-type>
140    <semantics>Applies the transform.</semantics>
141  </valid-expression>
142
143  <example-model>
144    <type name="boost::proto::_child_c&lt; 0 &gt;" />
145  </example-model>
146
147</concept>
148