* 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.
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.
/** 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,
DUE_TO_OBSOLETE = bit::RangeValue<TransactDetailField,2>::value,
DUE_TO_UPGRADE = bit::RangeValue<TransactDetailField,3>::value
};
- enum SolverStateValue
- {
- NORMAL = bit::RangeValue<SolverStateField,0>::value, // default, notthing special
- SEEN = bit::RangeValue<SolverStateField,1>::value, // already seen during ResolverUpgrade
- };
enum LicenceConfirmedValue
{
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
{ 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 resetWeak() const
- { return fieldValueIs<WeakField>( NO_WEAK ); }
+ bool isUnneeded() const
+ { return _bitfield.test( UNNEEDED ); }
+
+ bool hasWeak() 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>(); }
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 ); }
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!
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;