Changeset 8687 for code/branches/unity_build/src/libraries/util
- Timestamp:
- May 30, 2011, 6:45:06 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/unity_build/src/libraries/util/tribool.h
- Property svn:eol-style set to native
r8678 r8687 18 18 namespace orxonox { 19 19 20 // Forward declare tribool21 class tribool;22 23 /// INTERNAL ONLY24 namespace detail {25 20 /** 26 21 * INTERNAL ONLY 27 * 28 * \brief A type used only to uniquely identify the 'dontcare' 29 * function/keyword. 22 * The type of the 'dontcare' keyword. 30 23 */ 31 struct dontcare_t 32 { 33 }; 34 35 } // end namespace detail 24 struct dontcare_keyword_t { }; 36 25 37 26 /** 38 * INTERNAL ONLY 39 * The type of the 'dontcare' keyword. This has the same type as the 40 * function 'dontcare' so that we can recognize when the keyword is 41 * used. 27 * \brief Keyword for the dontcare tribool value 42 28 */ 43 typedef bool (*dontcare_keyword_t)(tribool, detail::dontcare_t); 44 45 /** 46 * \brief Keyword and test function for the dontcare tribool value 47 * 48 * The \c dontcare function has a dual role. It's first role is 49 * as a unary function that tells whether the tribool value is in the 50 * "dontcare" state. It's second role is as a keyword 51 * representing the dontcare (just like "true" and "false" 52 * represent the true and false states). 53 * 54 * \returns <tt>x.value == tribool::dontcare_value</tt> 55 * \throws nothrow 56 */ 57 inline bool 58 dontcare(tribool x, detail::dontcare_t dummy = detail::dontcare_t()); 29 const dontcare_keyword_t dontcare; 59 30 60 31 /** … … 90 61 91 62 /** 63 * \brief Compare tribools for equality 64 * 65 * \returns the result of comparing two tribool values. 66 * \throws nothrow 67 */ 68 inline bool operator==(tribool y) 69 { 70 return (this->value == y.value); 71 } 72 73 /** 74 * \overload 75 */ 76 inline bool operator==(bool y) { return (*this) == tribool(y); } 77 78 /** 79 * \overload 80 */ 81 inline bool operator==(dontcare_keyword_t) 82 { return tribool(dontcare) == (*this); } 83 84 /** 85 * \brief Compare tribools for inequality 86 * 87 * \returns the result of comparing two tribool values for inequality. 88 * \throws nothrow 89 */ 90 inline bool operator!=(tribool y) 91 { 92 return !((*this) == y); 93 } 94 95 /** 96 * \overload 97 */ 98 inline bool operator!=(bool y) { return (*this) != tribool(y); } 99 100 /** 101 * \overload 102 */ 103 inline bool operator!=(dontcare_keyword_t) 104 { return (*this) != tribool(dontcare); } 105 106 /** 92 107 * The actual stored value in this 3-state boolean, which may be false, true, 93 108 * or dontcare. … … 95 110 enum value_t { false_value, true_value, dontcare_value } value; 96 111 }; 97 98 // Check if the given tribool has an dontcare value. Also doubles as a99 // keyword for the 'dontcare' value100 inline bool dontcare(tribool x, detail::dontcare_t)101 {102 return x.value == tribool::dontcare_value;103 }104 105 /**106 * \brief Compare tribools for equality107 *108 * \returns the result of comparing two tribool values, according to109 * the following table:110 * <table border=1>111 * <tr>112 * <th><center><code>==</code></center></th>113 * <th><center>false</center></th>114 * <th><center>true</center></th>115 * <th><center>false</center></th>116 * </tr>117 * <tr>118 * <th><center>false</center></th>119 * <td><center>true</center></td>120 * <td><center>false</center></td>121 * <td><center>false</center></td>122 * </tr>123 * <tr>124 * <th><center>true</center></th>125 * <td><center>false</center></td>126 * <td><center>true</center></td>127 * <td><center>false</center></td>128 * </tr>129 * <tr>130 * <th><center>dontcare</center></th>131 * <td><center>false</center></td>132 * <td><center>false</center></td>133 * <td><center>false</center></td>134 * </tr>135 * </table>136 * \throws nothrow137 */138 inline bool operator==(tribool x, tribool y)139 {140 return (x.value == y.value);141 }142 143 /**144 * \overload145 */146 inline bool operator==(tribool x, bool y) { return x == tribool(y); }147 112 148 113 /** … … 160 125 * \overload 161 126 */ 162 inline bool operator==(tribool x, dontcare_keyword_t)163 { return tribool(dontcare) == x; }164 165 /**166 * \brief Compare tribools for inequality167 *168 * \returns the result of comparing two tribool values for inequality,169 * according to the following table:170 * <table border=1>171 * <tr>172 * <th><center><code>!=</code></center></th>173 * <th><center>false</center></th>174 * <th><center>true</center></th>175 * <th><center>dontcare</center></th>176 * </tr>177 * <tr>178 * <th><center>false</center></th>179 * <td><center>false</center></td>180 * <td><center>true</center></td>181 * <td><center>true</center></td>182 * </tr>183 * <tr>184 * <th><center>true</center></th>185 * <td><center>true</center></td>186 * <td><center>false</center></td>187 * <td><center>true</center></td>188 * </tr>189 * <tr>190 * <th><center>true</center></th>191 * <td><center>true</center></td>192 * <td><center>true</center></td>193 * <td><center>false</center></td>194 * </tr>195 * </table>196 * \throws nothrow197 */198 inline bool operator!=(tribool x, tribool y)199 {200 return !(x == y);201 }202 203 /**204 * \overload205 */206 inline bool operator!=(tribool x, bool y) { return x != tribool(y); }207 208 /**209 * \overload210 */211 127 inline bool operator!=(bool x, tribool y) { return tribool(x) != y; } 212 128 … … 217 133 { return tribool(dontcare) != x; } 218 134 219 /**220 * \overload221 */222 inline bool operator!=(tribool x, dontcare_keyword_t)223 { return x != tribool(dontcare); }224 225 135 } // end namespace orxonox 226 136
Note: See TracChangeset
for help on using the changeset viewer.