fold.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. Copyright 2012 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. <header name="boost/proto/transform/fold.hpp">
  9. <para>Contains definition of the
  10. <computeroutput>
  11. <classname alt="boost::proto::fold">proto::fold&lt;&gt;</classname>
  12. </computeroutput> and
  13. <computeroutput>
  14. <classname alt="boost::proto::reverse_fold">proto::reverse_fold&lt;&gt;</classname>
  15. </computeroutput>
  16. transforms.</para>
  17. <namespace name="boost">
  18. <namespace name="proto">
  19. <struct name="fold">
  20. <template>
  21. <template-type-parameter name="Sequence"/>
  22. <template-type-parameter name="State0"/>
  23. <template-type-parameter name="Fun"/>
  24. </template>
  25. <inherit>
  26. <classname>proto::transform</classname>&lt; fold&lt;Sequence, State0, Fun&gt; &gt;</inherit>
  27. <purpose>A <conceptname>PrimitiveTransform</conceptname> that invokes the
  28. <computeroutput>fusion::fold&lt;&gt;</computeroutput> algorithm to accumulate a value.</purpose>
  29. <description>
  30. <para>
  31. For the complete description of the behavior of the <computeroutput>proto::fold&lt;&gt;</computeroutput>
  32. transform, see the documentation for the nested <computeroutput>
  33. <classname>proto::fold::impl&lt;&gt;</classname>
  34. </computeroutput> class template.
  35. </para>
  36. </description>
  37. <struct name="impl">
  38. <template>
  39. <template-type-parameter name="Expr"/>
  40. <template-type-parameter name="State"/>
  41. <template-type-parameter name="Data"/>
  42. </template>
  43. <inherit><classname>proto::transform_impl</classname>&lt; Expr, State, Data &gt;</inherit>
  44. <typedef name="X">
  45. <purpose>For exposition only</purpose>
  46. <type><classname>when</classname>&lt;<classname>_</classname>, Sequence&gt;</type>
  47. </typedef>
  48. <typedef name="Y">
  49. <purpose>For exposition only</purpose>
  50. <type><classname>when</classname>&lt;<classname>_</classname>, State0&gt;</type>
  51. </typedef>
  52. <typedef name="seq">
  53. <purpose>A Fusion sequence, for exposition only</purpose>
  54. <type>typename boost::result_of&lt;X(Expr, State, Data)&gt;::type</type>
  55. </typedef>
  56. <typedef name="state0">
  57. <purpose>An initial state for the fold, for exposition only</purpose>
  58. <type>typename boost::result_of&lt;Y(Expr, State, Data)&gt;::type</type>
  59. </typedef>
  60. <typedef name="fun">
  61. <purpose><computeroutput>fun(d)(s,e) == when&lt;_,Fun&gt;()(e,s,d)</computeroutput></purpose>
  62. <type><emphasis>unspecified</emphasis></type>
  63. </typedef>
  64. <typedef name="result_type">
  65. <type>typename fusion::result_of::fold&lt;seq, state0, fun&gt;::type</type>
  66. </typedef>
  67. <method-group name="public member functions">
  68. <method name="operator()" cv="const">
  69. <type>result_type</type>
  70. <parameter name="expr">
  71. <paramtype>typename impl::expr_param</paramtype>
  72. <description>
  73. <para>The current expression </para>
  74. </description>
  75. </parameter>
  76. <parameter name="state">
  77. <paramtype>typename impl::state_param</paramtype>
  78. <description>
  79. <para>The current state </para>
  80. </description>
  81. </parameter>
  82. <parameter name="data">
  83. <paramtype>typename impl::data_param</paramtype>
  84. <description>
  85. <para>An arbitrary data </para>
  86. </description>
  87. </parameter>
  88. <description>
  89. <para>
  90. Let <computeroutput>seq</computeroutput> be
  91. <computeroutput><classname>when</classname>&lt;<classname>_</classname>, Sequence&gt;()(expr, state, data)</computeroutput>,
  92. let <computeroutput>state0</computeroutput> be
  93. <computeroutput><classname>when</classname>&lt;<classname>_</classname>, State0&gt;()(expr, state, data)</computeroutput>,
  94. and let <computeroutput>fun(data)</computeroutput> be an object such that
  95. <computeroutput>fun(data)(state, expr)</computeroutput> is equivalent to
  96. <computeroutput><classname>when</classname>&lt;<classname>_</classname>, Fun&gt;()(expr, state, data)</computeroutput>. Then,
  97. this function returns <computeroutput>fusion::fold(seq, state0, fun(data))</computeroutput>.
  98. </para>
  99. </description>
  100. </method>
  101. </method-group>
  102. </struct>
  103. </struct>
  104. <struct name="reverse_fold">
  105. <template>
  106. <template-type-parameter name="Sequence"/>
  107. <template-type-parameter name="State0"/>
  108. <template-type-parameter name="Fun"/>
  109. </template>
  110. <inherit><classname>proto::fold</classname>&lt; <classname>proto::_reverse</classname>(Sequence), State0, Fun &gt;</inherit>
  111. <purpose>
  112. A <conceptname>PrimitiveTransform</conceptname> that is the same as the <computeroutput><classname>proto::fold&lt;&gt;</classname></computeroutput>
  113. transform, except that it folds back-to-front instead of front-to-back. It uses the
  114. <computeroutput>
  115. <classname>proto::_reverse</classname>
  116. </computeroutput> callable <conceptname>PolymorphicFunctionObject</conceptname> to create a
  117. <computeroutput>fusion::reverse_view&lt;&gt;</computeroutput> of the sequence before invoking
  118. <computeroutput>fusion::fold&lt;&gt;</computeroutput>.
  119. </purpose>
  120. </struct>
  121. </namespace>
  122. </namespace>
  123. </header>