PrimitiveTransform.xml 4.1 KB

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