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<></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<></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< Expr, State, Data >()"> 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< 0 >" /> 145 </example-model> 146 147</concept> 148