11 #ifndef ZYPP_BASE_SETTRACKER_H
12 #define ZYPP_BASE_SETTRACKER_H
66 bool changed = ( new_r !=
_current );
80 bool changed = ( new_r !=
_current );
102 bool done =
_current.insert( val_r ).second;
116 bool done =
_current.erase( val_r );
119 if ( !
_added.erase( val_r ) )
163 {
return set_r.find( key_r ) != set_r.end(); }
165 template <
class TORDERED_SET,
typename enable_if =
typename TORDERED_SET::key_compare>
166 static void setDifference(
const TORDERED_SET & lhs,
const TORDERED_SET & rhs, TORDERED_SET & result_r )
169 std::set_difference( lhs.begin(), lhs.end(), rhs.begin(), rhs.end(),
170 std::inserter( result_r, result_r.end() ),
171 typename TORDERED_SET::key_compare() );
174 template <
class TUNORDERED_SET,
typename enable_if =
typename TUNORDERED_SET::hasher,
typename =
void>
175 static void setDifference(
const TUNORDERED_SET & lhs,
const TUNORDERED_SET & rhs, TUNORDERED_SET & result_r )
178 for (
const auto & l : lhs )
179 {
if ( rhs.find( l ) == rhs.end() ) result_r.insert( l ); }
189 template <
class TSet>
190 std::ostream & operator<<( std::ostream & str, const SetTracker<TSet> & obj )
191 {
return str <<
"set(" << obj.current().size() <<
"|+" << obj.added().size() <<
"|-" << obj.removed().size() <<
')'; }
197 #endif // ZYPP_BASE_SETTRACKER_H
set_type & removed()
Return the set of removed items.
Track added/removed set items based on an initial set.
const set_type & removed() const
Return the set of removed items.
bool set(set_type new_r)
Set a new_r set and track changes.
bool setInitial()
(Re-)Start tracking the current set (discards previously tracked changes).
bool setInitial(set_type new_r)
Start tracking a new set (discards previously tracked changes).
const set_type & current() const
Return the current set.
static void setDifference(const TORDERED_SET &lhs, const TORDERED_SET &rhs, TORDERED_SET &result_r)
set_type & added()
Return the set of added items.
bool wasAdded(const key_type &key_r) const
Whether val_r is tracked as added.
SetTracker(set_type initial_r)
Ctor taking an initial set.
static void setDifference(const TUNORDERED_SET &lhs, const TUNORDERED_SET &rhs, TUNORDERED_SET &result_r)
bool add(const value_type &val_r)
Add an element to the set and track changes.
bool contains(const key_type &key_r) const
Whether val_r is in the set.
const set_type & added() const
Return the set of added items.
TSet::value_type value_type
static bool find(const set_type &set_r, const key_type &key_r)
SetTracker()
Default Ctor: empty set.
set_type & current()
Return the current set.
bool wasRemoved(const key_type &key_r) const
Whether val_r is tracked as removed.