Support libsatsolver compatible Rel construction and conversion from/to unsigned.
authorMichael Andres <ma@suse.de>
Wed, 28 Nov 2007 16:44:01 +0000 (16:44 +0000)
committerMichael Andres <ma@suse.de>
Wed, 28 Nov 2007 16:44:01 +0000 (16:44 +0000)
zypp/Rel.h

index 0779ba9e24b74fe4f911c3c57f12923d3bc86bff..d3aa96fecfa4f544a5b376326344778ea77ff935 100644 (file)
@@ -59,8 +59,19 @@ namespace zypp
 
     /** Enumarators provided \b only for use \ref inSwitch statement.
      * \see inSwitch
+     * \note Enumarator values also correspond to the values libsatsolver
+     * uses to encode these relations.
     */
-    enum for_use_in_switch { EQ_e, NE_e, LT_e, LE_e, GT_e, GE_e, ANY_e, NONE_e };
+    enum for_use_in_switch {
+      NONE_e = 0U,
+      GT_e   = 1U,
+      EQ_e   = 2U,
+      LT_e   = 4U,
+      GE_e   = GT_e|EQ_e,
+      LE_e   = LT_e|EQ_e,
+      NE_e   = GT_e|LT_e,
+      ANY_e  = GT_e|EQ_e|LT_e,
+    };
 
     /** DefaultCtor ANY. */
     Rel()
@@ -80,6 +91,12 @@ namespace zypp
     explicit
     Rel( const std::string & strval_r );
 
+    /** Ctor from bits. */
+    explicit
+    Rel( unsigned bits_r )
+    : _op( for_use_in_switch(bits_r & ANY_e) )
+    {}
+
     /** String representation of relational operator.
      * \return "==", "!=", "<", "<=", ">", ">=", "ANY" or "NONE"
     */
@@ -107,6 +124,10 @@ namespace zypp
     for_use_in_switch inSwitch() const
     { return _op; }
 
+    /** Enumarator values suitable for libsatsolver. */
+    unsigned bits() const
+    { return _op; }
+
   private:
     /** Ctor to initialize the relational operator contants. */
     Rel( for_use_in_switch op_r )