/jni/boost/libs/utility/OptionalPointee.html

https://github.com/LeifAndersen/Android-Supertux · HTML · 158 lines · 150 code · 7 blank · 1 comment · 0 complexity · 584c378a7a7fe81758f2c9f64f43f8e1 MD5 · raw file

  1. <HTML>
  2. <Head>
  3. <Title>OptionalPointee Concept</Title>
  4. </HEAD>
  5. <BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
  6. ALINK="#ff0000">
  7. <IMG SRC="../../boost.png"
  8. ALT="C++ Boost" width="277" height="86">
  9. <!--end header-->
  10. <BR Clear>
  11. <H1>Concept: OptionalPointee</H1>
  12. <h3>Description</h3>
  13. A type is a model of <i>OptionalPointee</i> if it points to (or refers to) a value
  14. that may not exist. That is, if it has a <b>pointee</b> which might be <b>valid</b>
  15. (existent) or <b>invalid</b> (inexistent); and it is possible to test whether the
  16. pointee is valid or not.
  17. This model does <u>not</u> imply pointer semantics: i.e., it does not imply shallow copy nor
  18. aliasing.
  19. <h3>Notation</h3>
  20. <Table>
  21. <TR>
  22. <TD VAlign=top> <tt>T</tt> </TD>
  23. <TD VAlign=top> is a type that is a model of OptionalPointee</TD>
  24. </TR>
  25. <TR>
  26. <TD VAlign=top> <tt>t</tt> </TD>
  27. <TD VAlign=top> is an object of type <tt>T</tt> or possibly <tt>const T</tt></TD>
  28. </tr>
  29. </table>
  30. <h3>Definitions</h3>
  31. <h3>Valid expressions</h3>
  32. <Table border>
  33. <TR>
  34. <TH> Name </TH>
  35. <TH> Expression </TH>
  36. <TH> Return type </TH>
  37. <TH> Semantics </TH>
  38. </TR>
  39. <TR>
  40. <TD VAlign=top>Value Access</TD>
  41. <TD VAlign=top>&nbsp;<tt>*t</tt></TD>
  42. <TD VAlign=top>&nbsp;<tt>T&amp;</tt></TD>
  43. <TD VAlign=top>If the pointee is valid returns a reference to
  44. the pointee.<br>
  45. If the pointee is invalid the result is <i>undefined</i>.</TD>
  46. <TD VAlign=top> </TD>
  47. </TR>
  48. <TR>
  49. <TD VAlign=top>Value Access</TD>
  50. <TD VAlign=top>&nbsp;<tt>t-><i>xyz</i></tt></TD>
  51. <TD VAlign=top>&nbsp;<tt>T*</tt></TD>
  52. <TD VAlign=top>If the pointee is valid returns a builtin pointer to the pointee.<br>
  53. If the pointee is invalid the result is <i>undefined</i> (It might not even return NULL).<br>
  54. </TD>
  55. <TD VAlign=top> </TD>
  56. </TR>
  57. <TR>
  58. <TD VAlign=top>Validity Test</TD>
  59. <TD VAlign=top>&nbsp;<tt>t</tt><br>
  60. &nbsp;<tt>t != 0</tt><br>
  61. &nbsp;<tt>!!t</tt>
  62. </TD>
  63. <TD VAlign=top>&nbsp;bool </TD>
  64. <TD VAlign=top>If the pointee is valid returns true.<br>
  65. If the pointee is invalid returns false.</TD>
  66. <TD VAlign=top></TD>
  67. </TR>
  68. <TR>
  69. <TD VAlign=top>Invalidity Test</TD>
  70. <TD VAlign=top>&nbsp;<tt>t == 0</tt><br>
  71. &nbsp;<tt>!t</tt>
  72. </TD>
  73. <TD VAlign=top>&nbsp;bool </TD>
  74. <TD VAlign=top>If the pointee is valid returns false.<br>
  75. If the pointee is invalid returns true.</TD>
  76. <TD VAlign=top></TD>
  77. </TR>
  78. </table>
  79. <h3>Models</h3>
  80. <UL>
  81. <LI><tt>pointers, both builtin and smart.</tt>
  82. <LI><tt>boost::optional&lt;&gt;</tt>
  83. </UL>
  84. <HR>
  85. <h3>OptionalPointee and relational operations</h3>
  86. <p>This concept does not define any particular semantic for relational operations, therefore,
  87. a type which models this concept might have either shallow or deep relational semantics.<br>
  88. For instance, pointers, which are models of OptionalPointee, have shallow relational operators:
  89. comparisons of pointers do not involve comparisons of pointees.
  90. This makes sense for pointers because they have shallow copy semantics.<br>
  91. But boost::optional&lt;T&gt;, on the other hand, which is also a model of OptionalPointee, has
  92. deep-copy and deep-relational semantics.<br>
  93. If generic code is written for this concept, it is important not to use relational
  94. operators directly because the semantics might be different depending on the actual type.<br>
  95. Still, the concept itsef can be used to define <i>deep</i> relational tests that can
  96. be used in generic code with any type which models OptionalPointee:</p>
  97. <a name="equal"></a>
  98. <p><u>Equivalence relation:</u></p>
  99. <pre>template&lt;class OptionalPointee&gt;
  100. inline
  101. bool equal_pointees ( OptionalPointee const&amp; x, OptionalPointee const&amp; y )
  102. {
  103. return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
  104. }
  105. template&lt;class OptionalPointee&gt;
  106. struct equal_pointees_t : std::binary_function&lt;OptionalPointee,OptionalPointee,bool&gt;
  107. {
  108. bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
  109. { return equal_pointees(x,y) ; }
  110. } ;
  111. </pre>
  112. <p>The preceding generic function and function object have the following semantics:<br>
  113. If both <b>x</b> and <b>y</b> have valid pointees, it compares values via <code>(*x == *y)</code>.<br>
  114. If only one has a valid pointee, returns <code>false</code>.<br>
  115. If both have invalid pointees, returns <code>true</code>.</p>
  116. <a name="less"></a>
  117. <p><u>Less-than relation:</u></p>
  118. <pre>template&lt;class OptionalPointee&gt;
  119. inline
  120. bool less_pointees ( OptionalPointee const&amp; x, OptionalPointee const&amp; y )
  121. {
  122. return !y ? false : ( !x ? true : (*x) < (*y) ) ;
  123. }
  124. template&lt;class OptionalPointee&gt;
  125. struct less_pointees_t : std::binary_function&lt;OptionalPointee,OptionalPointee,bool&gt;
  126. {
  127. bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
  128. { return less_pointees(x,y) ; }
  129. } ;
  130. </pre>
  131. <p>The preceding generic function and function object have the following semantics:<br>
  132. If <b>y</b> has an invalid pointee, returns <code>false</code>.<br>
  133. Else, if <b>x</b> has an invalid pointee, returns <code>true</code>.<br>
  134. Else, ( <b>x</b> and <b>y</b> have valid pointees), compares values via <code>(*x &lt;
  135. *y).</code></p>
  136. <p><br>
  137. All these functions and function
  138. objects are is implemented in <a href="../../boost/utility/compare_pointees.hpp">compare_pointees.hpp</a></p>
  139. <p>Notice that OptionalPointee does not imply aliasing (and optional&lt;&gt; for instance does not alias);
  140. so direct usage of relational operators with the implied aliasing of shallow semantics
  141. -as with pointers- should not be used with generic code written for this concept.</p>
  142. <br>
  143. <HR>
  144. <TABLE>
  145. <TR valign=top>
  146. <TD nowrap>Copyright &copy 2003</TD><TD>
  147. <A HREF="mailto:fernando_cacciola@hotmail.com">Fernando Cacciola</A>,
  148. based on the original concept developed by Augustus Saunders.
  149. </TD></TR></TABLE>
  150. </BODY>
  151. </HTML>