Imported Upstream version 17.10.1
[platform/upstream/libzypp.git] / zypp / TriBool.h
index 505cd39..f2c5cfe 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef ZYPP_TRIBOOL_H
 #define ZYPP_TRIBOOL_H
 
+#include <iosfwd>
+#include <string>
 #include <boost/logic/tribool.hpp>
 
 ///////////////////////////////////////////////////////////////////
@@ -27,6 +29,11 @@ namespace zypp
    *   using   boost::logic::indeterminate;
    * }
    * \endcode
+   *
+   * \warning Be carefull.esp. when comparing \ref TriBool using
+   * \c operator==, as <b><tt>( indeterminate == indeterminate )</tt></b>
+   * does \b not evaluate \b true. It's \c indeterminate.
+   *
    * \see http://www.boost.org/doc/html/tribool.html
    * \ingroup BOOST
   */
@@ -34,7 +41,34 @@ namespace zypp
   using   boost::logic::tribool;
   using   boost::logic::indeterminate;
 
+  inline std::string asString( const TriBool & val_r, const std::string & istr_r = std::string(),
+                                                     const std::string & tstr_r = std::string(),
+                                                     const std::string & fstr_r = std::string() )
+  {
+    std::string ret;
+    if (indeterminate(val_r))
+      ret = ( istr_r.empty() ? "indeterminate" : istr_r );
+    else if (val_r)
+      ret = ( tstr_r.empty() ? "true" : tstr_r );
+    else
+      ret = ( fstr_r.empty() ? "false" : fstr_r );
+    return ret;
+  }
+
   /////////////////////////////////////////////////////////////////
 } // namespace zypp
 ///////////////////////////////////////////////////////////////////
+namespace boost
+{
+    namespace logic
+    {
+      /** \relates TriBool stream output */
+      inline std::ostream & operator<<(std::ostream & s, const tribool & obj)
+      { return s << zypp::asString( obj ); }
+
+      /** \relates TriBool whether 2 tribool have the same state (this is NOT ==) */
+      inline bool sameTriboolState( tribool lhs, tribool rhs )
+      { return( ( indeterminate(lhs) && indeterminate(rhs) ) || ( bool )( lhs == rhs ) ); }
+    }
+}
 #endif // ZYPP_TRIBOOL_H