Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 30, 2011, 6:45:06 PM (13 years ago)
Author:
rgrieder
Message:

Adjusted implementation of tribool to work well with tolua and integrated it into our GUI code.
Use tribool(true), tribool(false) and tribool(dontcare) in Lua.

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  
    1818namespace orxonox {
    1919
    20 // Forward declare tribool
    21 class tribool;
    22 
    23 /// INTERNAL ONLY
    24 namespace detail {
    2520/**
    2621 * INTERNAL ONLY
    27  *
    28  * \brief A type used only to uniquely identify the 'dontcare'
    29  * function/keyword.
     22 * The type of the 'dontcare' keyword.
    3023 */
    31 struct dontcare_t
    32 {
    33 };
    34 
    35 } // end namespace detail
     24struct dontcare_keyword_t { };
    3625
    3726/**
    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
    4228 */
    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());
     29const dontcare_keyword_t dontcare;
    5930
    6031/**
     
    9061
    9162  /**
     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  /**
    92107   * The actual stored value in this 3-state boolean, which may be false, true,
    93108   * or dontcare.
     
    95110  enum value_t { false_value, true_value, dontcare_value } value;
    96111};
    97 
    98 // Check if the given tribool has an dontcare value. Also doubles as a
    99 // keyword for the 'dontcare' value
    100 inline bool dontcare(tribool x, detail::dontcare_t)
    101 {
    102   return x.value == tribool::dontcare_value;
    103 }
    104 
    105 /**
    106  * \brief Compare tribools for equality
    107  *
    108  * \returns the result of comparing two tribool values, according to
    109  * 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 nothrow
    137  */
    138 inline bool operator==(tribool x, tribool y)
    139 {
    140   return (x.value == y.value);
    141 }
    142 
    143 /**
    144  * \overload
    145  */
    146 inline bool operator==(tribool x, bool y) { return x == tribool(y); }
    147112
    148113/**
     
    160125 * \overload
    161126 */
    162 inline bool operator==(tribool x, dontcare_keyword_t)
    163 { return tribool(dontcare) == x; }
    164 
    165 /**
    166  * \brief Compare tribools for inequality
    167  *
    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 nothrow
    197  */
    198 inline bool operator!=(tribool x, tribool y)
    199 {
    200   return !(x == y);
    201 }
    202 
    203 /**
    204  * \overload
    205  */
    206 inline bool operator!=(tribool x, bool y) { return x != tribool(y); }
    207 
    208 /**
    209  * \overload
    210  */
    211127inline bool operator!=(bool x, tribool y) { return tribool(x) != y; }
    212128
     
    217133{ return tribool(dontcare) != x; }
    218134
    219 /**
    220  * \overload
    221  */
    222 inline bool operator!=(tribool x, dontcare_keyword_t)
    223 { return x != tribool(dontcare); }
    224 
    225135} // end namespace orxonox
    226136
Note: See TracChangeset for help on using the changeset viewer.