LCOV - code coverage report
Current view: top level - gcc - tristate.h (source / functions) Hit Total Coverage
Test: gcc.info Lines: 4 4 100.0 %
Date: 2023-07-19 08:18:47 Functions: 0 0 -

          Line data    Source code
       1             : /* "True" vs "False" vs "Unknown".
       2             :    Copyright (C) 2019-2023 Free Software Foundation, Inc.
       3             :    Contributed by David Malcolm <dmalcolm@redhat.com>.
       4             : 
       5             : This file is part of GCC.
       6             : 
       7             : GCC is free software; you can redistribute it and/or modify it
       8             : under the terms of the GNU General Public License as published by
       9             : the Free Software Foundation; either version 3, or (at your option)
      10             : any later version.
      11             : 
      12             : GCC is distributed in the hope that it will be useful, but
      13             : WITHOUT ANY WARRANTY; without even the implied warranty of
      14             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             : General Public License for more details.
      16             : 
      17             : You should have received a copy of the GNU General Public License
      18             : along with GCC; see the file COPYING3.  If not see
      19             : <http://www.gnu.org/licenses/>.  */
      20             : 
      21             : #ifndef GCC_TRISTATE_H
      22             : #define GCC_TRISTATE_H
      23             : 
      24             : /* "True" vs "False" vs "Unknown".  */
      25             : 
      26             : class tristate {
      27             :  public:
      28             :   enum value {
      29             :     TS_UNKNOWN,
      30             :     TS_TRUE,
      31             :     TS_FALSE
      32             :   };
      33             : 
      34        1873 :   tristate (enum value val) : m_value (val) {}
      35        1424 :   tristate (bool val) : m_value (val ? TS_TRUE : TS_FALSE) {}
      36             :   static tristate unknown () { return tristate (TS_UNKNOWN); }
      37             : 
      38             :   const char *as_string () const;
      39             : 
      40             :   bool is_known () const { return m_value != TS_UNKNOWN; }
      41             :   bool is_unknown () const { return m_value == TS_UNKNOWN; }
      42        1792 :   bool is_true () const { return m_value == TS_TRUE; }
      43          81 :   bool is_false () const { return m_value == TS_FALSE; }
      44             : 
      45             :   tristate not_ () const;
      46             :   tristate or_ (tristate other) const;
      47             :   tristate and_ (tristate other) const;
      48             : 
      49             :   bool operator== (const tristate &other) const
      50             :   {
      51             :     return m_value == other.m_value;
      52             :   }
      53             : 
      54             :   bool operator!= (const tristate &other) const
      55             :   {
      56             :     return m_value != other.m_value;
      57             :   }
      58             : 
      59             :   enum value get_value () const { return m_value; }
      60             : 
      61             :  private:
      62             :   enum value m_value;
      63             : };
      64             : 
      65             : /* Overloaded boolean operators on tristates.  */
      66             : 
      67             : inline tristate
      68             : operator ! (tristate t)
      69             : {
      70             :   return t.not_ ();
      71             : }
      72             : 
      73             : inline tristate
      74             : operator || (tristate a, tristate b)
      75             : {
      76             :   return a.or_ (b);
      77             : }
      78             : 
      79             : inline tristate
      80             : operator && (tristate a, tristate b)
      81             : {
      82             :   return a.and_ (b);
      83             : }
      84             : 
      85             : #endif /* GCC_TRISTATE_H */

Generated by: LCOV version 1.16