1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/TriBool.h
12 #ifndef ZYPP_TRIBOOL_H
13 #define ZYPP_TRIBOOL_H
17 #include <boost/logic/tribool.hpp>
19 ///////////////////////////////////////////////////////////////////
21 { /////////////////////////////////////////////////////////////////
23 /** 3-state boolean logic (\c true, \c false and \c indeterminate).
27 * typedef boost::logic::tribool TriBool;
28 * using boost::logic::tribool;
29 * using boost::logic::indeterminate;
33 * \warning Be carefull.esp. when comparing \ref TriBool using
34 * \c operator==, as <b><tt>( indeterminate == indeterminate )</tt></b>
35 * does \b not evaluate \b true. It's \c indeterminate.
37 * \see http://www.boost.org/doc/html/tribool.html
40 typedef boost::logic::tribool TriBool;
41 using boost::logic::tribool;
42 using boost::logic::indeterminate;
44 inline std::string asString( const TriBool & val_r, const std::string & istr_r = std::string(),
45 const std::string & tstr_r = std::string(),
46 const std::string & fstr_r = std::string() )
49 if (indeterminate(val_r))
50 ret = ( istr_r.empty() ? "indeterminate" : istr_r );
52 ret = ( tstr_r.empty() ? "true" : tstr_r );
54 ret = ( fstr_r.empty() ? "false" : fstr_r );
58 /////////////////////////////////////////////////////////////////
60 ///////////////////////////////////////////////////////////////////
65 /** \relates TriBool stream output */
66 inline std::ostream & operator<<(std::ostream & s, const tribool & obj)
67 { return s << zypp::asString( obj ); }
69 /** \relates TriBool whether 2 tribool have the same state (this is NOT ==) */
70 inline bool sameTriboolState( tribool lhs, tribool rhs )
71 { return( ( indeterminate(lhs) && indeterminate(rhs) ) || ( bool )( lhs == rhs ) ); }
74 #endif // ZYPP_TRIBOOL_H