Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

XBOOL.H

Go to the documentation of this file.
00001 //: xbool.h
00008 #ifndef xbool_h
00009 #define xbool_h
00010 
00011 #include    "setup.h"   // include setup values
00012 #include    <wx/wxprec.h>
00013 
00014 #ifdef __BORLANDC__
00015     #pragma hdrstop
00016 #endif
00017 
00018 #ifndef WX_PRECOMP
00019     #include <wx/wx.h>
00020 #endif
00021 
00022 
00038 class xboolean : wxObject
00039 {   public:
00041         enum    xbool   // MUST be public
00042             {   Unknown     =   -1,     // value is not yet set/unknown/irrelevant 
00043                 False       =   false,  // value is surely false
00044                 True        =   true    // value is surely true
00045             } value;    
00046 
00049         xboolean(xbool xb = Unknown)
00050             {   value = xb;}
00054         xboolean(bool b)
00055         {   if(b)
00056                 value = True;
00057             else
00058                 value = False;
00059         }
00062         xboolean(const xboolean &xb)
00063         {   value = xb.value;}
00065         virtual 
00066         void    CalculateValue(void)
00067         {}  // By default, makes nothing
00069         virtual 
00070         void    CalculateValue(void) const
00071         {}  // By default, makes nothing
00074         virtual 
00075         xbool GetValue(void) 
00076         {   CalculateValue();   // re-calculate the xbool value
00077             return value;
00078         }
00081         virtual 
00082         xbool GetValue(void) const
00083         {   CalculateValue();   // re-calculate the xbool value
00084             return value;
00085         }
00089         virtual inline
00090         wxString    GetValueString(void)
00091         {   if(IsUnknown())
00092                 return _("U");
00093             else if(IsFalse())
00094                 return _("F");
00095             else if(IsTrue())
00096                 return _("T");
00097             else
00098                 return "?";
00099         }
00102         inline
00103         bool IsFalse(void)
00104         {   return False == GetValue();}
00107         inline
00108         bool IsTrue(void)
00109         {   return True == GetValue();}
00112         inline
00113         bool IsUnknown(void)
00114         {   return Unknown == GetValue();}
00117         xboolean operator ! (void) 
00118         {   xboolean res;
00119             if(Unknown == GetValue())
00120                 res.value = Unknown;
00121             else if(False == value)
00122                 res.value = True;
00123             else if(True == value)
00124                 res.value = False;
00125             return res;
00126         }
00127 #if defined (__GNUG__)
00128 
00131         xboolean&  operator = ( xboolean &xb)
00132         {   value = xb.GetValue();
00133             return *this;
00134         }
00135 #endif
00136 
00139         xboolean&  operator = ( const xboolean &xb)
00140         {   value = xb.GetValue();
00141             return *this;
00142         }
00146         xboolean&    operator = (bool &b)
00147         {   if(b)
00148                 value = True;
00149             else
00150                 value = False;
00151             return *this;
00152         }
00158         friend xboolean
00159         operator && ( xboolean &xbL, xboolean &xbR)
00160         {   xboolean res;
00161             if((False == xbL.GetValue()) || (False == xbR.GetValue()))
00162                 res.value = False;
00163             else if ((True == xbL.value) && (True == xbR.value))
00164                     res.value = True;
00165                 else res.value = Unknown;
00166             return res; 
00167         }
00173         friend xboolean
00174         operator && ( bool &bL,  xboolean &xbR)
00175         {   xboolean res;
00176             if((!bL) || (False == xbR.GetValue()))
00177                 res.value = False;
00178             else if ((bL) && (True == xbR.value))
00179                     res.value = True;
00180                 else res.value = Unknown;
00181             return res; 
00182         }
00188         friend xboolean
00189         operator && ( xboolean &xbL, bool &bR)  
00190         {   xboolean res;
00191             if((False == xbL.GetValue())
00192                 || (!bR))
00193                 res.value = False;
00194             else if ((True == xbL.value) && (bR))
00195                     res.value = True;
00196                 else res.value = Unknown;
00197             return res; 
00198         }
00204         friend xboolean
00205         operator || ( xboolean &xbL, xboolean &xbR) 
00206         {   xboolean res;
00207             if((True == xbL.GetValue())
00208                 || (True == xbR.GetValue()))
00209                 res.value = True;
00210             else if ((False == xbR.value) && (False == xbL.value))
00211                     res.value = False;
00212                 else
00213                     res.value = Unknown;
00214             return res;
00215         }
00221         friend xboolean
00222         operator || ( bool &bL, xboolean &xbR) 
00223         {   xboolean res;
00224             if((bL) || (True == xbR.GetValue()))
00225                 res.value = True;
00226             else if ((!bL) && (False == xbR.value))
00227                     res.value = False;
00228                 else
00229                     res.value = Unknown;
00230             return res;
00231         }
00237         friend xboolean
00238         operator || ( xboolean &xbL, bool &bR) 
00239         {   xboolean res;
00240             if((True == xbL.GetValue()) || (bR))
00241                 res.value = True;
00242             else if ((!bR) && (False == xbL.value))
00243                     res.value = False;
00244                 else
00245                     res.value = Unknown;
00246             return res;
00247         }
00253         friend xboolean
00254         operator == ( xboolean &xbL, xboolean &xbR)
00255         {   xboolean res;
00256             if((Unknown == xbL.GetValue())
00257                 || (Unknown == xbR.GetValue()))
00258                 res.value = Unknown;
00259             else
00260                 res.value = (xbL.value == xbR.value)
00261                         ? True : False;
00262             return res;
00263         }
00268         xboolean
00269         operator == ( bool &b)
00270         {   xboolean res;
00271             if(Unknown == GetValue())
00272                 res.value = Unknown;
00273             else
00274                 res.value = (value == (short) b)
00275                         ? True : False;
00276             return res;
00277         }
00282         xboolean
00283         operator != ( xboolean &xb)
00284         {   xboolean res;
00285             if((Unknown == GetValue())
00286                 || (Unknown == xb.GetValue()))
00287                 res.value = Unknown;
00288             else
00289                 res.value = ( value != xb.value)
00290                     ? True : False;
00291             return res;
00292         }
00297         xboolean
00298         operator != ( bool &b)
00299         {   xboolean res;
00300             if(Unknown == GetValue())
00301                 res.value = Unknown;
00302             else
00303                 res.value = (value != (short)b)
00304                     ? True : False;
00305             return res;
00306         }
00307 };// of xboolean
00308 #endif //xbool_h

Generated on Tue Dec 23 10:24:08 2003 for xps4xps by doxygen 1.3.5