repeat.xml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  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/repeat.hpp">
  9. <para>
  10. Contains macros to ease the generation of repetitious code constructs.
  11. </para>
  12. <macro name="BOOST_PROTO_REPEAT" kind="functionlike">
  13. <macro-parameter name="MACRO"/>
  14. <purpose>Repeatedly invoke the specified macro.</purpose>
  15. <description>
  16. <para>
  17. <computeroutput>BOOST_PROTO_REPEAT()</computeroutput> is used to generate the kind of repetitive
  18. code that is typical of EDSLs built with Proto.
  19. <computeroutput>BOOST_PROTO_REPEAT(<replaceable>MACRO</replaceable>)</computeroutput>
  20. is equivalent to:
  21. </para>
  22. <para>
  23. <programlisting><replaceable>MACRO</replaceable>(1, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
  24. <replaceable>MACRO</replaceable>(2, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
  25. ...
  26. <replaceable>MACRO</replaceable>(<macroname>BOOST_PROTO_MAX_ARITY</macroname>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)</programlisting>
  27. </para>
  28. <para>
  29. <emphasis role="bold">Example:</emphasis>
  30. </para>
  31. <para>
  32. See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
  33. </para>
  34. </description>
  35. </macro>
  36. <macro name="BOOST_PROTO_REPEAT_FROM_TO" kind="functionlike">
  37. <macro-parameter name="FROM"/>
  38. <macro-parameter name="TO"/>
  39. <macro-parameter name="MACRO"/>
  40. <purpose>Repeatedly invoke the specified macro.</purpose>
  41. <description>
  42. <para>
  43. <computeroutput>BOOST_PROTO_REPEAT_FROM_TO()</computeroutput> is used to generate the kind of repetitive
  44. code that is typical of EDSLs built with Proto.
  45. <computeroutput>BOOST_PROTO_REPEAT_FROM_TO(<replaceable>FROM</replaceable>, <replaceable>TO</replaceable>, <replaceable>MACRO</replaceable>)</computeroutput>
  46. is equivalent to:
  47. </para>
  48. <para>
  49. <programlisting><replaceable>MACRO</replaceable>(<replaceable>FROM</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
  50. <replaceable>MACRO</replaceable>(<replaceable>FROM+1</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)
  51. ...
  52. <replaceable>MACRO</replaceable>(<replaceable>TO-1</replaceable>, <macroname>BOOST_PROTO_typename_A</macroname>, <macroname>BOOST_PROTO_A_const_ref</macroname>, <macroname>BOOST_PROTO_A_const_ref_a</macroname>, <macroname>BOOST_PROTO_ref_a</macroname>)</programlisting>
  53. </para>
  54. <para>
  55. <emphasis role="bold">Example:</emphasis>
  56. </para>
  57. <para>
  58. <programlisting>// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
  59. // following construct() function template.
  60. #define M0(N, typename_A, A_const_ref, A_const_ref_a, ref_a) \
  61. template&lt;typename T, typename_A(N)&gt; \
  62. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; \
  63. <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
  64. , construct_helper&lt;T&gt; \
  65. , A_const_ref(N) \
  66. >::type const \
  67. construct(A_const_ref_a(N)) \
  68. { \
  69. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; \
  70. <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
  71. &gt;( \
  72. construct_helper&lt;T&gt;() \
  73. , ref_a(N) \
  74. ); \
  75. }
  76. BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PROTO_MAX_ARITY, M0)
  77. #undef M0</programlisting>
  78. </para>
  79. <para>
  80. The above invocation of <computeroutput>BOOST_PROTO_REPEAT_FROM_TO()</computeroutput>
  81. will generate the following code:
  82. </para>
  83. <para>
  84. <programlisting>template&lt;typename T, typename A0&gt;
  85. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt;
  86. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  87. , construct_helper&lt;T&gt;
  88. , A0 const &amp;
  89. &gt;::type const
  90. construct(A0 const &amp; a0)
  91. {
  92. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt;
  93. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  94. &gt;(
  95. construct_helper&lt;T&gt;()
  96. , boost::ref(a0)
  97. );
  98. }
  99. template&lt;typename T, typename A0, typename A1&gt;
  100. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt;
  101. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  102. , construct_helper&lt;T&gt;
  103. , A0 const &amp;
  104. , A1 const &amp;
  105. &gt;::type const
  106. construct(A0 const &amp; a0, A1 const &amp; a1)
  107. {
  108. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt;
  109. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  110. &gt;(
  111. construct_helper&lt;T&gt;()
  112. , boost::ref(a0)
  113. , boost::ref(a1)
  114. );
  115. }
  116. // ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...</programlisting>
  117. </para>
  118. </description>
  119. </macro>
  120. <macro name="BOOST_PROTO_REPEAT_EX" kind="functionlike">
  121. <macro-parameter name="MACRO"/>
  122. <macro-parameter name="typename_A"/>
  123. <macro-parameter name="A"/>
  124. <macro-parameter name="A_a"/>
  125. <macro-parameter name="a"/>
  126. <purpose>Repeatedly invoke the specified macro.</purpose>
  127. <description>
  128. <para>
  129. <computeroutput>BOOST_PROTO_REPEAT_EX()</computeroutput> is used to generate the kind of repetitive
  130. code that is typical of EDSLs built with Proto.
  131. <computeroutput>BOOST_PROTO_REPEAT_EX(<replaceable>MACRO</replaceable>, <replaceable>typename_A</replaceable>, <replaceable>A</replaceable>, <replaceable>A_a</replaceable>, <replaceable>a</replaceable>)</computeroutput>
  132. is equivalent to:
  133. </para>
  134. <para>
  135. <programlisting><replaceable>MACRO</replaceable>(1, typename_A, A, A_a, a)
  136. <replaceable>MACRO</replaceable>(2, typename_A, A, A_a, a)
  137. ...
  138. <replaceable>MACRO</replaceable>(<macroname>BOOST_PROTO_MAX_ARITY</macroname>, typename_A, A, A_a, a)</programlisting>
  139. </para>
  140. <para>
  141. <emphasis role="bold">Example:</emphasis>
  142. </para>
  143. <para>
  144. See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
  145. </para>
  146. </description>
  147. </macro>
  148. <macro name="BOOST_PROTO_REPEAT_FROM_TO_EX" kind="functionlike">
  149. <macro-parameter name="FROM"/>
  150. <macro-parameter name="TO"/>
  151. <macro-parameter name="MACRO"/>
  152. <macro-parameter name="typename_A"/>
  153. <macro-parameter name="A"/>
  154. <macro-parameter name="A_a"/>
  155. <macro-parameter name="a"/>
  156. <purpose>Repeatedly invoke the specified macro.</purpose>
  157. <description>
  158. <para>
  159. <computeroutput>BOOST_PROTO_REPEAT_FROM_TO_EX()</computeroutput> is used to generate the kind of repetitive
  160. code that is typical of EDSLs built with Proto.
  161. <computeroutput>BOOST_PROTO_REPEAT_FROM_TO_EX(<replaceable>FROM</replaceable>, <replaceable>TO</replaceable>, <replaceable>MACRO</replaceable>, <replaceable>typename_A</replaceable>, <replaceable>A</replaceable>, <replaceable>A_a</replaceable>, <replaceable>a</replaceable>)</computeroutput>
  162. is equivalent to:
  163. </para>
  164. <para>
  165. <programlisting><replaceable>MACRO</replaceable>(<replaceable>FROM</replaceable>, typename_A, A, A_a, a)
  166. <replaceable>MACRO</replaceable>(<replaceable>FROM+1</replaceable>, typename_A, A, A_a, a)
  167. ...
  168. <replaceable>MACRO</replaceable>(<replaceable>TO-1</replaceable>, typename_A, A, A_a, a)</programlisting>
  169. </para>
  170. <para>
  171. <emphasis role="bold">Example:</emphasis>
  172. </para>
  173. <para>
  174. See <computeroutput><macroname>BOOST_PROTO_REPEAT_FROM_TO</macroname>()</computeroutput>.
  175. </para>
  176. </description>
  177. </macro>
  178. <macro name="BOOST_PROTO_LOCAL_ITERATE" kind="functionlike">
  179. <purpose>Vertical repetition of a user-supplied macro.</purpose>
  180. <description>
  181. <para>
  182. <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput> is used generate the kind of repetitive code that is typical
  183. of EDSLs built with Proto. This macro causes the user-defined macro <computeroutput>BOOST_PROTO_LOCAL_MACRO()</computeroutput> to
  184. be expanded with values in the range specified by <computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput>.
  185. </para>
  186. <para>
  187. <emphasis role="bold">Usage:</emphasis>
  188. </para>
  189. <para>
  190. <programlisting>#include BOOST_PROTO_LOCAL_ITERATE()</programlisting>
  191. </para>
  192. <para>
  193. <emphasis role="bold">Example:</emphasis>
  194. </para>
  195. <para>
  196. <programlisting>// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
  197. // following construct() function template.
  198. #define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, ref_a)\
  199. template&lt;typename T, typename_A(N)&gt; \
  200. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt; \
  201. <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
  202. , construct_helper&lt;T&gt; \
  203. , A_const_ref(N) \
  204. >::type const \
  205. construct(A_const_ref_a(N)) \
  206. { \
  207. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt; \
  208. <classname alt="boost::proto::tag::function">proto::tag::function</classname> \
  209. &gt;( \
  210. construct_helper&lt;T&gt;() \
  211. , ref_a(N) \
  212. ); \
  213. }
  214. #define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY))
  215. #include BOOST_PROTO_LOCAL_ITERATE()</programlisting>
  216. </para>
  217. <para>
  218. The above inclusion of <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput>
  219. will generate the following code:
  220. </para>
  221. <para>
  222. <programlisting>template&lt;typename T, typename A0&gt;
  223. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt;
  224. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  225. , construct_helper&lt;T&gt;
  226. , A0 const &amp;
  227. &gt;::type const
  228. construct(A0 const &amp; a0)
  229. {
  230. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt;
  231. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  232. &gt;(
  233. construct_helper&lt;T&gt;()
  234. , boost::ref(a0)
  235. );
  236. }
  237. template&lt;typename T, typename A0, typename A1&gt;
  238. typename <classname alt="boost::proto::result_of::make_expr">proto::result_of::make_expr</classname>&lt;
  239. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  240. , construct_helper&lt;T&gt;
  241. , A0 const &amp;
  242. , A1 const &amp;
  243. &gt;::type const
  244. construct(A0 const &amp; a0, A1 const &amp; a1)
  245. {
  246. return <functionname alt="boost::proto::make_expr">proto::make_expr</functionname>&lt;
  247. <classname alt="boost::proto::tag::function">proto::tag::function</classname>
  248. &gt;(
  249. construct_helper&lt;T&gt;()
  250. , boost::ref(a0)
  251. , boost::ref(a1)
  252. );
  253. }
  254. // ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...</programlisting>
  255. </para>
  256. <para>
  257. If <computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput> is not defined by the user, it defaults
  258. to <computeroutput>(1, BOOST_PROTO_MAX_ARITY)</computeroutput>.
  259. </para>
  260. <para>
  261. At each iteration, <computeroutput>BOOST_PROTO_LOCAL_MACRO()</computeroutput> is invoked with the current
  262. iteration number and the following 4 macro parameters:
  263. <itemizedlist>
  264. <listitem><computeroutput>BOOST_PROTO_LOCAL_typename_A</computeroutput></listitem>
  265. <listitem><computeroutput>BOOST_PROTO_LOCAL_A</computeroutput></listitem>
  266. <listitem><computeroutput>BOOST_PROTO_LOCAL_A_a</computeroutput></listitem>
  267. <listitem><computeroutput>BOOST_PROTO_LOCAL_a</computeroutput></listitem>
  268. </itemizedlist>
  269. If these macros are not defined by the user, they default respectively to:
  270. <itemizedlist>
  271. <listitem><computeroutput><macroname>BOOST_PROTO_typename_A</macroname></computeroutput></listitem>
  272. <listitem><computeroutput><macroname>BOOST_PROTO_A_const_ref</macroname></computeroutput></listitem>
  273. <listitem><computeroutput><macroname>BOOST_PROTO_A_const_ref_a</macroname></computeroutput></listitem>
  274. <listitem><computeroutput><macroname>BOOST_PROTO_ref_a</macroname></computeroutput></listitem>
  275. </itemizedlist>
  276. </para>
  277. <para>
  278. After including <computeroutput>BOOST_PROTO_LOCAL_ITERATE()</computeroutput>, the
  279. following macros are automatically undefined:
  280. <itemizedlist>
  281. <listitem><computeroutput>BOOST_PROTO_LOCAL_MACRO</computeroutput></listitem>
  282. <listitem><computeroutput>BOOST_PROTO_LOCAL_LIMITS</computeroutput></listitem>
  283. <listitem><computeroutput>BOOST_PROTO_LOCAL_typename_A</computeroutput></listitem>
  284. <listitem><computeroutput>BOOST_PROTO_LOCAL_A</computeroutput></listitem>
  285. <listitem><computeroutput>BOOST_PROTO_LOCAL_A_a</computeroutput></listitem>
  286. <listitem><computeroutput>BOOST_PROTO_LOCAL_a</computeroutput></listitem>
  287. </itemizedlist>
  288. </para>
  289. </description>
  290. </macro>
  291. <macro name="BOOST_PROTO_typename_A" kind="functionlike">
  292. <macro-parameter name="N"/>
  293. <purpose>
  294. Generates sequences like
  295. <computeroutput>
  296. typename A<subscript>0</subscript>,
  297. typename A<subscript>1</subscript>, …
  298. typename A<subscript>N-1</subscript>
  299. </computeroutput>.
  300. </purpose>
  301. <description>
  302. <para>
  303. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  304. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  305. </para>
  306. <para>
  307. <computeroutput>BOOST_PROTO_typename_A(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  308. </para>
  309. <para>
  310. <programlisting>typename A<subscript>0</subscript>, typename A<subscript>1</subscript>, … typename A<subscript>N-1</subscript></programlisting>
  311. </para>
  312. </description>
  313. </macro>
  314. <macro name="BOOST_PROTO_A_const_ref" kind="functionlike">
  315. <macro-parameter name="N"/>
  316. <purpose>
  317. Generates sequences like
  318. <computeroutput>
  319. A<subscript>0</subscript> const &amp;,
  320. A<subscript>1</subscript> const &amp;, …
  321. A<subscript>N-1</subscript> const &amp;
  322. </computeroutput>.
  323. </purpose>
  324. <description>
  325. <para>
  326. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  327. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  328. </para>
  329. <para>
  330. <computeroutput>BOOST_PROTO_A_const_ref(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  331. </para>
  332. <para>
  333. <programlisting>A<subscript>0</subscript> const &amp;, A<subscript>1</subscript> const &amp;, … A<subscript>N-1</subscript> const &amp;</programlisting>
  334. </para>
  335. </description>
  336. </macro>
  337. <macro name="BOOST_PROTO_A_ref" kind="functionlike">
  338. <macro-parameter name="N"/>
  339. <purpose>
  340. Generates sequences like
  341. <computeroutput>
  342. A<subscript>0</subscript> &amp;,
  343. A<subscript>1</subscript> &amp;, …
  344. A<subscript>N-1</subscript> &amp;
  345. </computeroutput>.
  346. </purpose>
  347. <description>
  348. <para>
  349. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  350. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  351. </para>
  352. <para>
  353. <computeroutput>BOOST_PROTO_A_ref(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  354. </para>
  355. <para>
  356. <programlisting>A<subscript>0</subscript> &amp;, A<subscript>1</subscript> &amp;, … A<subscript>N-1</subscript> &amp;</programlisting>
  357. </para>
  358. </description>
  359. </macro>
  360. <macro name="BOOST_PROTO_A" kind="functionlike">
  361. <macro-parameter name="N"/>
  362. <purpose>
  363. Generates sequences like
  364. <computeroutput>
  365. A<subscript>0</subscript>,
  366. A<subscript>1</subscript>, …
  367. A<subscript>N-1</subscript>
  368. </computeroutput>.
  369. </purpose>
  370. <description>
  371. <para>
  372. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  373. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  374. </para>
  375. <para>
  376. <computeroutput>BOOST_PROTO_A(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  377. </para>
  378. <para>
  379. <programlisting>A<subscript>0</subscript>, A<subscript>1</subscript>, … A<subscript>N-1</subscript></programlisting>
  380. </para>
  381. </description>
  382. </macro>
  383. <macro name="BOOST_PROTO_A_const" kind="functionlike">
  384. <macro-parameter name="N"/>
  385. <purpose>
  386. Generates sequences like
  387. <computeroutput>
  388. A<subscript>0</subscript> const,
  389. A<subscript>1</subscript> const, …
  390. A<subscript>N-1</subscript> const
  391. </computeroutput>.
  392. </purpose>
  393. <description>
  394. <para>
  395. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  396. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  397. </para>
  398. <para>
  399. <computeroutput>BOOST_PROTO_A_const(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  400. </para>
  401. <para>
  402. <programlisting>A<subscript>0</subscript> const, A<subscript>1</subscript> const, … A<subscript>N-1</subscript> const</programlisting>
  403. </para>
  404. </description>
  405. </macro>
  406. <macro name="BOOST_PROTO_A_const_ref_a" kind="functionlike">
  407. <macro-parameter name="N"/>
  408. <purpose>
  409. Generates sequences like
  410. <computeroutput>
  411. A<subscript>0</subscript> const &amp; a<subscript>0</subscript>,
  412. A<subscript>1</subscript> const &amp; a<subscript>1</subscript>, …
  413. A<subscript>N-1</subscript> const &amp; a<subscript>N-1</subscript>
  414. </computeroutput>.
  415. </purpose>
  416. <description>
  417. <para>
  418. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  419. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  420. </para>
  421. <para>
  422. <computeroutput>BOOST_PROTO_A_const_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  423. </para>
  424. <para>
  425. <programlisting>A<subscript>0</subscript> const &amp; a<subscript>0</subscript>, A<subscript>1</subscript> const &amp; a<subscript>1</subscript>, … A<subscript>N-1</subscript> const &amp; a<subscript>N-1</subscript></programlisting>
  426. </para>
  427. </description>
  428. </macro>
  429. <macro name="BOOST_PROTO_A_ref_a" kind="functionlike">
  430. <macro-parameter name="N"/>
  431. <purpose>
  432. Generates sequences like
  433. <computeroutput>
  434. A<subscript>0</subscript> &amp; a<subscript>0</subscript>,
  435. A<subscript>1</subscript> &amp; a<subscript>1</subscript>, …
  436. A<subscript>N-1</subscript> &amp; a<subscript>N-1</subscript>
  437. </computeroutput>.
  438. </purpose>
  439. <description>
  440. <para>
  441. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  442. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  443. </para>
  444. <para>
  445. <computeroutput>BOOST_PROTO_A_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  446. </para>
  447. <para>
  448. <programlisting>A<subscript>0</subscript> &amp; a<subscript>0</subscript>, A<subscript>1</subscript> &amp; a<subscript>1</subscript>, … A<subscript>N-1</subscript> &amp; a<subscript>N-1</subscript></programlisting>
  449. </para>
  450. </description>
  451. </macro>
  452. <macro name="BOOST_PROTO_ref_a" kind="functionlike">
  453. <macro-parameter name="N"/>
  454. <purpose>
  455. Generates sequences like
  456. <computeroutput>
  457. boost::ref(a<subscript>0</subscript>),
  458. boost::ref(a<subscript>1</subscript>), …
  459. boost::ref(a<subscript>N-1</subscript>)
  460. </computeroutput>.
  461. </purpose>
  462. <description>
  463. <para>
  464. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  465. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  466. </para>
  467. <para>
  468. <computeroutput>BOOST_PROTO_ref_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  469. </para>
  470. <para>
  471. <programlisting>boost::ref(a<subscript>0</subscript>), boost::ref(a<subscript>1</subscript>), … boost::ref(a<subscript>N-1</subscript>)</programlisting>
  472. </para>
  473. </description>
  474. </macro>
  475. <macro name="BOOST_PROTO_a" kind="functionlike">
  476. <macro-parameter name="N"/>
  477. <purpose>
  478. Generates sequences like
  479. <computeroutput>
  480. a<subscript>0</subscript>,
  481. a<subscript>1</subscript>, …
  482. a<subscript>N-1</subscript>
  483. </computeroutput>.
  484. </purpose>
  485. <description>
  486. <para>
  487. Intended for use with the <computeroutput><macroname>BOOST_PROTO_REPEAT</macroname>()</computeroutput>
  488. and <computeroutput><macroname>BOOST_PROTO_LOCAL_ITERATE</macroname>()</computeroutput> macros.
  489. </para>
  490. <para>
  491. <computeroutput>BOOST_PROTO_a(<replaceable>N</replaceable>)</computeroutput> generates sequences like:
  492. </para>
  493. <para>
  494. <programlisting>a<subscript>0</subscript>, a<subscript>1</subscript>, … a<subscript>N-1</subscript></programlisting>
  495. </para>
  496. </description>
  497. </macro>
  498. </header>