vmd_modifiers_filter.html 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Filtering modifiers</title>
  5. <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;The Variadic Macro Data Library 1.9">
  8. <link rel="up" href="../vmd_modifiers.html" title="Macros with modifiers">
  9. <link rel="prev" href="../vmd_modifiers.html" title="Macros with modifiers">
  10. <link rel="next" href="vmd_modifiers_identifier.html" title="Identifier modifiers">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="../vmd_modifiers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../vmd_modifiers.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_modifiers_identifier.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h3 class="title">
  27. <a name="variadic_macro_data.vmd_modifiers.vmd_modifiers_filter"></a><a class="link" href="vmd_modifiers_filter.html" title="Filtering modifiers">Filtering
  28. modifiers</a>
  29. </h3></div></div></div>
  30. <p>
  31. Filtering modifiers are optional modifiers which work with some generic macros
  32. to specify a type of data to apply to the macro's functionality. The filtering
  33. modifier itself is an optional parameter specified as a v-type. Any v-type,
  34. specified as an optional parameter, may be used as a filtering modifier.
  35. </p>
  36. <h5>
  37. <a name="variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.h0"></a>
  38. <span class="phrase"><a name="variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.usage_with_equality_macros"></a></span><a class="link" href="vmd_modifiers_filter.html#variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.usage_with_equality_macros">Usage
  39. with equality macros</a>
  40. </h5>
  41. <p>
  42. The equality macros, BOOST_VMD_EQUAL and BOOST_VMD_NOT_EQUAL, tests generically
  43. whether each of its two required inputs are equal or not equal to each other.
  44. </p>
  45. <p>
  46. Each of these macro takes a single optional parameter, a filtering modifier,
  47. to narrow the focus of its equality testing to a particular v-type.
  48. </p>
  49. <p>
  50. For the macro BOOST_VMD_EQUAL this optional parameter when specified means
  51. that equality is not only that the two required input parameters are equal
  52. but also that they are of the type or of a subtype of the third optional
  53. parameter. A number and a v-type are subtypes of identifiers while a non-empty
  54. list and an array are subtypes of tuples.
  55. </p>
  56. <p>
  57. Conversely BOOST_VMD_NOT_EQUAL, with the optional third v-type parameter,
  58. returns 1 if either the first two parameters are not equal or if the type
  59. of the first two parameters is not the type or a subtype of the third parameter.
  60. Otherwise it returns 0. It is implemented as the complement of BOOST_VMD_EQUAL
  61. so that whenever BOOST_VMD_EQUAL returns 1, BOOST_VMD_NOT_EQUAL returns 0
  62. and vice versa.
  63. </p>
  64. <p>
  65. Here is an example of using BOOST_VMD_EQUAL with a filtering modifier. BOOST_VMD_NOT_EQUAL
  66. is just the complement of the results in our example for each result, and
  67. would be redundant to be specified each time below.
  68. </p>
  69. <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">vmd</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  70. <span class="preprocessor">#define</span> <span class="identifier">BOOST_VMD_REGISTER_AN_ID1</span> <span class="special">(</span><span class="identifier">AN_ID1</span><span class="special">)</span>
  71. <span class="preprocessor">#define</span> <span class="identifier">BOOST_VMD_REGISTER_AN_ID2</span> <span class="special">(</span><span class="identifier">AN_ID2</span><span class="special">)</span>
  72. <span class="preprocessor">#define</span> <span class="identifier">BOOST_VMD_DETECT_AN_ID1_AN_ID1</span>
  73. <span class="preprocessor">#define</span> <span class="identifier">BOOST_VMD_DETECT_AN_ID2_AN_ID2</span>
  74. <span class="preprocessor">#define</span> <span class="identifier">AN_IDENTIFIER1</span> <span class="identifier">AN_ID1</span>
  75. <span class="preprocessor">#define</span> <span class="identifier">AN_IDENTIFIER2</span> <span class="identifier">AN_ID2</span>
  76. <span class="preprocessor">#define</span> <span class="identifier">AN_IDENTIFIER3</span> <span class="identifier">AN_ID1</span> <span class="comment">// same as AN_IDENTIFIER1 = AN_ID1</span>
  77. <span class="preprocessor">#define</span> <span class="identifier">A_NUMBER1</span> <span class="number">33</span>
  78. <span class="preprocessor">#define</span> <span class="identifier">A_NUMBER2</span> <span class="number">145</span>
  79. <span class="preprocessor">#define</span> <span class="identifier">A_NUMBER3</span> <span class="number">33</span> <span class="comment">// same as A_NUMBER1 = 33</span>
  80. <span class="preprocessor">#define</span> <span class="identifier">A_TUPLE1</span> <span class="special">(</span><span class="identifier">AN_IDENTIFIER1</span><span class="special">,</span><span class="identifier">A_NUMBER1</span><span class="special">)</span>
  81. <span class="preprocessor">#define</span> <span class="identifier">A_TUPLE2</span> <span class="special">(</span><span class="identifier">AN_IDENTIFIER1</span><span class="special">,</span><span class="identifier">A_NUMBER2</span><span class="special">)</span>
  82. <span class="preprocessor">#define</span> <span class="identifier">A_TUPLE3</span> <span class="special">(</span><span class="identifier">AN_IDENTIFIER3</span><span class="special">,</span><span class="identifier">A_NUMBER3</span><span class="special">)</span> <span class="comment">// same as A_TUPLE1 = (AN_ID1,33)</span>
  83. <span class="preprocessor">#define</span> <span class="identifier">A_LIST1</span> <span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,(</span><span class="identifier">A_NUMBER3</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span>
  84. <span class="preprocessor">#define</span> <span class="identifier">A_LIST2</span> <span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,(</span><span class="identifier">A_NUMBER2</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span>
  85. <span class="preprocessor">#define</span> <span class="identifier">A_LIST3</span> <span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,(</span><span class="identifier">A_NUMBER3</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span>
  86. <span class="preprocessor">#define</span> <span class="identifier">A_LIST4</span> <span class="identifier">BOOST_PP_NIL</span> <span class="comment">// empty list</span>
  87. <span class="preprocessor">#define</span> <span class="identifier">A_LIST5</span> <span class="identifier">BOOST_PP_NIL</span> <span class="comment">// empty list</span>
  88. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">AN_IDENTIFIER1</span><span class="special">,</span><span class="identifier">AN_IDENTIFIER2</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span>
  89. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">AN_IDENTIFIER1</span><span class="special">,</span><span class="identifier">AN_IDENTIFIER3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span>
  90. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">AN_IDENTIFIER1</span><span class="special">,</span><span class="identifier">AN_IDENTIFIER3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TYPE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span> <span class="identifier">because</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">does</span> <span class="keyword">not</span> <span class="identifier">match</span>
  91. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,</span><span class="identifier">A_NUMBER2</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_NUMBER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span>
  92. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,</span><span class="identifier">A_NUMBER3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_NUMBER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span>
  93. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,</span><span class="identifier">A_NUMBER3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span> <span class="identifier">because</span> <span class="identifier">a</span> <span class="identifier">number</span> <span class="identifier">is</span> <span class="identifier">an</span> <span class="identifier">identifier</span>
  94. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_NUMBER1</span><span class="special">,</span><span class="identifier">A_NUMBER3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_EMPTY</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span> <span class="identifier">because</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">does</span> <span class="keyword">not</span> <span class="identifier">match</span>
  95. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_TUPLE1</span><span class="special">,</span><span class="identifier">A_TUPLE2</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span>
  96. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_TUPLE1</span><span class="special">,</span><span class="identifier">A_TUPLE3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span>
  97. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_TUPLE1</span><span class="special">,</span><span class="identifier">A_TUPLE3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_ARRAY</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span> <span class="identifier">because</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">does</span> <span class="keyword">not</span> <span class="identifier">match</span>
  98. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST1</span><span class="special">,</span><span class="identifier">A_LIST2</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span>
  99. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST1</span><span class="special">,</span><span class="identifier">A_LIST3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span>
  100. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST1</span><span class="special">,</span><span class="identifier">A_LIST3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span> <span class="identifier">because</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">does</span> <span class="keyword">not</span> <span class="identifier">match</span>
  101. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST1</span><span class="special">,</span><span class="identifier">A_LIST3</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span> <span class="identifier">because</span> <span class="identifier">a</span> <span class="identifier">non</span><span class="special">-</span><span class="identifier">empty</span> <span class="identifier">list</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">a</span> <span class="identifier">tuple</span>
  102. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST4</span><span class="special">,</span><span class="identifier">A_LIST5</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span>
  103. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST4</span><span class="special">,</span><span class="identifier">A_LIST5</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">1</span> <span class="identifier">because</span> <span class="identifier">an</span> <span class="identifier">empty</span> <span class="identifier">list</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">identifier</span>
  104. <span class="identifier">BOOST_VMD_EQUAL</span><span class="special">(</span><span class="identifier">A_LIST4</span><span class="special">,</span><span class="identifier">A_LIST5</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">0</span> <span class="identifier">because</span> <span class="identifier">an</span> <span class="identifier">empty</span> <span class="identifier">list</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">a</span> <span class="identifier">tuple</span>
  105. </pre>
  106. <h5>
  107. <a name="variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.h1"></a>
  108. <span class="phrase"><a name="variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.usage_with_boost_vmd_elem"></a></span><a class="link" href="vmd_modifiers_filter.html#variadic_macro_data.vmd_modifiers.vmd_modifiers_filter.usage_with_boost_vmd_elem">Usage
  109. with BOOST_VMD_ELEM</a>
  110. </h5>
  111. <p>
  112. As with the equality macros BOOST_VMD_ELEM allows one to perform filtering
  113. for the result. An optional parameter of a v-type can be used so that BOOST_VMD_ELEM
  114. returns its result only if the sequence element is of the v-type specified,
  115. else it fails to find the element in the same way that an element number
  116. which is outside the bounds of the sequence fails.
  117. </p>
  118. <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">vmd</span><span class="special">/</span><span class="identifier">elem</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  119. <span class="preprocessor">#define</span> <span class="identifier">BOOST_VMD_REGISTER_ANAME</span> <span class="special">(</span><span class="identifier">ANAME</span><span class="special">)</span> <span class="comment">// an identifier must always be registered to be found by VMD</span>
  120. <span class="preprocessor">#define</span> <span class="identifier">A_SEQUENCE</span> <span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">)</span> <span class="number">46</span> <span class="special">(</span><span class="identifier">list_data1</span><span class="special">,(</span><span class="identifier">list_data2</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span> <span class="identifier">BOOST_VMD_TYPE_SEQ</span> <span class="identifier">ANAME</span>
  121. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">)</span>
  122. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">)</span>
  123. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_SEQ</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  124. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">46</span>
  125. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_NUMBER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">46</span>
  126. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="number">46</span> <span class="identifier">since</span> <span class="identifier">a</span> <span class="identifier">number</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">identifier</span>
  127. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  128. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="special">(</span><span class="identifier">list_data1</span><span class="special">,(</span><span class="identifier">list_data2</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span>
  129. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="special">(</span><span class="identifier">list_data1</span><span class="special">,(</span><span class="identifier">list_data2</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span>
  130. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="special">(</span><span class="identifier">list_data1</span><span class="special">,(</span><span class="identifier">list_data2</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">))</span> <span class="identifier">since</span> <span class="identifier">a</span> <span class="identifier">list</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">a</span> <span class="identifier">tuple</span>
  131. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TYPE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  132. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_VMD_TYPE_SEQ</span>
  133. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TYPE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_VMD_TYPE_SEQ</span>
  134. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_VMD_TYPE_SEQ</span> <span class="identifier">since</span> <span class="identifier">a</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="identifier">also</span> <span class="identifier">an</span> <span class="identifier">identifier</span>
  135. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  136. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">4</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">ANAME</span>
  137. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">4</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">ANAME</span>
  138. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">4</span><span class="special">,</span><span class="identifier">A_SEQUENCE</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_NUMBER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  139. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_PP_NIL</span>
  140. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_LIST</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_PP_NIL</span> <span class="identifier">since</span> <span class="identifier">it</span> <span class="identifier">is</span> <span class="identifier">an</span> <span class="identifier">empty</span> <span class="identifier">list</span>
  141. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_IDENTIFIER</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">BOOST_PP_NIL</span> <span class="identifier">since</span> <span class="identifier">it</span> <span class="identifier">a</span> <span class="identifier">registered</span> <span class="identifier">identifier</span>
  142. <span class="identifier">BOOST_VMD_ELEM</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="identifier">BOOST_PP_NIL</span><span class="special">,</span><span class="identifier">BOOST_VMD_TYPE_TUPLE</span><span class="special">)</span> <span class="identifier">will</span> <span class="keyword">return</span> <span class="identifier">emptiness</span>
  143. </pre>
  144. <p>
  145. If you specify more than one v-type as a filtering modifier to BOOST_VMD_ELEM
  146. the last v-type becomes the filter.
  147. </p>
  148. <p>
  149. Filtering with BOOST_VMD_ELEM denotes the type of the data expected when
  150. the particular element is found. Because filtering represents the type of
  151. the data requested, filtering modifiers and return type modifiers are mutually
  152. exclusive and any filtering modifier means that return type modifiers specified
  153. are ignored.
  154. </p>
  155. </div>
  156. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  157. <td align="left"></td>
  158. <td align="right"><div class="copyright-footer">Copyright &#169; 2010-2017 Tropic Software
  159. East Inc</div></td>
  160. </tr></table>
  161. <hr>
  162. <div class="spirit-nav">
  163. <a accesskey="p" href="../vmd_modifiers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../vmd_modifiers.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_modifiers_identifier.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  164. </div>
  165. </body>
  166. </html>