Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / zypp / ResStatus.h
index 6a7962b..a7e7dd3 100644 (file)
@@ -37,7 +37,7 @@ namespace zypp
    *        nonrelevant: it is unimportant for the user
    *       satisfied: it important nothing has to be done
    *       broken: it is incomplete. So e.g. an update is needed
-   * \li \c TransactField Wheter to transact this resolvable
+   * \li \c TransactField Whether to transact this resolvable
    *        (delete if installed install if uninstalled).
    *        In case the resolvable is locked, only USER may modify the
    *        transact bit.
@@ -70,9 +70,8 @@ namespace zypp
     typedef bit::Range<FieldType,ValidateField::end,         2> TransactField;
     typedef bit::Range<FieldType,TransactField::end,         2> TransactByField;
     typedef bit::Range<FieldType,TransactByField::end,       2> TransactDetailField;
-    typedef bit::Range<FieldType,TransactDetailField::end,   1> SolverStateField;
-    typedef bit::Range<FieldType,SolverStateField::end,      1> LicenceConfirmedField;
-    typedef bit::Range<FieldType,LicenceConfirmedField::end, 2> WeakField;
+    typedef bit::Range<FieldType,TransactDetailField::end,   1> LicenceConfirmedField;
+    typedef bit::Range<FieldType,LicenceConfirmedField::end, 4> WeakField;
     typedef bit::Range<FieldType,WeakField::end,             1> UserLockQueryField; // internal
     // enlarge FieldType if more bit's needed. It's not yet
     // checked by the compiler.
@@ -117,7 +116,6 @@ namespace zypp
         /** Detail for no transact, i.e. reset any Install/RemoveDetailValue. */
         NO_DETAIL = bit::RangeValue<TransactDetailField,0>::value,
       };
-
     enum InstallDetailValue
       {
         EXPLICIT_INSTALL = bit::RangeValue<TransactDetailField,0>::value,
@@ -127,12 +125,8 @@ namespace zypp
       {
         EXPLICIT_REMOVE = bit::RangeValue<TransactDetailField,0>::value,
        SOFT_REMOVE     = bit::RangeValue<TransactDetailField,1>::value,
-        DUE_TO_UPGRADE  = bit::RangeValue<TransactDetailField,2>::value
-      };
-    enum SolverStateValue
-      {
-       NORMAL     = bit::RangeValue<SolverStateField,0>::value, // default, notthing special
-       SEEN       = bit::RangeValue<SolverStateField,1>::value, // already seen during ResolverUpgrade
+        DUE_TO_OBSOLETE = bit::RangeValue<TransactDetailField,2>::value,
+        DUE_TO_UPGRADE  = bit::RangeValue<TransactDetailField,3>::value
       };
 
     enum LicenceConfirmedValue
@@ -141,12 +135,13 @@ namespace zypp
         LICENCE_CONFIRMED   = bit::RangeValue<LicenceConfirmedField,1>::value
       };
 
-    enum WeakValue
+    enum WeakValue     // Unlike the other fields those are BITS that may be or'ed!
       {
         NO_WEAK                = bit::RangeValue<WeakField,0>::value,
-        SUGGESTED              = bit::RangeValue<WeakField,1>::value,
-       RECOMMENDED             = bit::RangeValue<WeakField,2>::value,
-       SUGGESTED_AND_RECOMMENDED = bit::RangeValue<WeakField,3>::value
+        SUGGESTED              = bit::RangeValue<WeakField,1<<0>::value,
+       RECOMMENDED             = bit::RangeValue<WeakField,1<<1>::value,
+       ORPHANED                = bit::RangeValue<WeakField,1<<2>::value,
+       UNNEEDED                = bit::RangeValue<WeakField,1<<3>::value
       };
 
     enum UserLockQuery // internal
@@ -184,30 +179,37 @@ namespace zypp
     { fieldValueAssign<LicenceConfirmedField>( toVal_r ? LICENCE_CONFIRMED : LICENCE_UNCONFIRMED ); }
 
   public:
-
     bool isRecommended() const
-    { return fieldValueIs<WeakField>( RECOMMENDED ); }
+    { return _bitfield.test( RECOMMENDED ); }
 
     bool isSuggested() const
-    { return fieldValueIs<WeakField>( SUGGESTED ); }
+    { return _bitfield.test( SUGGESTED ); }
+
+    bool isOrphaned() const
+    { return _bitfield.test( ORPHANED ); }
+
+    bool isUnneeded() const
+    { return _bitfield.test( UNNEEDED ); }
+
+    bool hasWeak() const
+    { return ! fieldValueIs<WeakField>( NO_WEAK ); }
 
-    bool resetWeak() const
-    { return fieldValueIs<WeakField>( NO_WEAK ); }
+    void resetWeak()
+    { return fieldValueAssign<WeakField>( NO_WEAK ); }
 
     void setRecommended( bool toVal_r = true )
-    { if (isSuggested())
-       fieldValueAssign<WeakField>( toVal_r ? SUGGESTED_AND_RECOMMENDED : SUGGESTED );
-    else
-       fieldValueAssign<WeakField>( toVal_r ? RECOMMENDED : NO_WEAK );
-    }
+    { _bitfield.set( RECOMMENDED, toVal_r ); }
 
     void setSuggested( bool toVal_r = true )
-    { if (isRecommended())
-       fieldValueAssign<WeakField>( toVal_r ? SUGGESTED_AND_RECOMMENDED : RECOMMENDED );
-    else
-       fieldValueAssign<WeakField>( toVal_r ? SUGGESTED : NO_WEAK );
-    }
+    { _bitfield.set( SUGGESTED, toVal_r ); }
+
+    void setOrphaned( bool toVal_r = true )
+    { _bitfield.set( ORPHANED, toVal_r ); }
 
+    void setUnneeded( bool toVal_r = true )
+    { _bitfield.set( UNNEEDED, toVal_r ); }
+
+  public:
     ValidateValue validate() const
     { return (ValidateValue)_bitfield.value<ValidateField>(); }
 
@@ -256,8 +258,8 @@ namespace zypp
     bool isUserLocked() const
     { return isLocked() && isByUser(); }
 
-    bool isSoftLocked( TransactByValue causer_r = USER ) const
-    { return isKept() && fieldValueIs<TransactByField>( causer_r ); }
+    bool isSoftLocked() const
+    { return isKept() && ( isByApplLow() || isByUser() ); }
 
     bool isKept() const
     { return fieldValueIs<TransactField>( KEEP_STATE ); }
@@ -301,6 +303,9 @@ namespace zypp
        }
     }
 
+    bool isToBeUninstalledDueToObsolete () const
+    { return isToBeUninstalled() && fieldValueIs<TransactDetailField>( DUE_TO_OBSOLETE ); }
+
     bool isToBeUninstalledDueToUpgrade() const
     { return isToBeUninstalled() && fieldValueIs<TransactDetailField>( DUE_TO_UPGRADE ); }
 
@@ -545,6 +550,13 @@ namespace zypp
     //------------------------------------------------------------------------
     // *** These are only for the Resolver ***
 
+    bool setToBeUninstalledDueToObsolete ( )
+    {
+      if (!setToBeUninstalled (SOLVER)) return false;
+      fieldValueAssign<TransactDetailField>(DUE_TO_OBSOLETE);
+      return true;
+    }
+
     bool setToBeUninstalledDueToUpgrade ( TransactByValue causer )
     {
       if (!setToBeUninstalled (causer)) return false;
@@ -622,15 +634,6 @@ namespace zypp
       return true;
     }
 
-    bool isSeen () const
-    { return fieldValueIs<SolverStateField>( SEEN ); }
-
-    bool setSeen (bool value)
-    {
-      fieldValueAssign<SolverStateField>( value ? SEEN : NORMAL );
-      return true;
-    }
-
     bool setStatus( ResStatus newStatus_r )
     {
       // State field is immutable!
@@ -650,6 +653,7 @@ namespace zypp
     static const ResStatus toBeInstalled;
     static const ResStatus toBeUninstalled;
     static const ResStatus toBeUninstalledDueToUpgrade;
+    static const ResStatus toBeUninstalledDueToObsolete;
     //@}
 
   private:
@@ -658,30 +662,29 @@ namespace zypp
                ValidateValue v      = UNDETERMINED,
                TransactValue t      = KEEP_STATE,
                InstallDetailValue i = EXPLICIT_INSTALL,
-               RemoveDetailValue r  = EXPLICIT_REMOVE,
-              SolverStateValue ssv = NORMAL );
+               RemoveDetailValue r  = EXPLICIT_REMOVE );
 
     /** Return whether the corresponding Field has value \a val_r.
     */
-    template<class _Field>
+    template<class TField>
       bool fieldValueIs( FieldType val_r ) const
-      { return _bitfield.isEqual<_Field>( val_r ); }
+    { return _bitfield.isEqual<TField>( val_r ); }
 
     /** Set the corresponding Field to value \a val_r.
     */
-    template<class _Field>
+    template<class TField>
       void fieldValueAssign( FieldType val_r )
-      { _bitfield.assign<_Field>( val_r ); }
+    { _bitfield.assign<TField>( val_r ); }
 
     /** compare two values.
     */
-    template<class _Field>
+    template<class TField>
       bool isGreaterThan( FieldType val_r )
-         { return _bitfield.value<_Field>() > val_r; }
+    { return _bitfield.value<TField>() > val_r; }
 
-    template<class _Field>
+    template<class TField>
       bool isLessThan( FieldType val_r )
-         { return _bitfield.value<_Field>() < val_r; }
+    { return _bitfield.value<TField>() < val_r; }
 
   private:
     friend class resstatus::StatusBackup;
@@ -692,6 +695,12 @@ namespace zypp
   /** \relates ResStatus Stream output */
   std::ostream & operator<<( std::ostream & str, const ResStatus & obj );
 
+  /** \relates ResStatus Stream output */
+  std::ostream & operator<<( std::ostream & str, ResStatus::TransactValue obj );
+
+  /** \relates ResStatus Stream output */
+  std::ostream & operator<<( std::ostream & str, ResStatus::TransactByValue obj );
+
   /** \relates ResStatus */
   inline bool operator==( const ResStatus & lhs, const ResStatus & rhs )
   { return lhs._bitfield == rhs._bitfield; }