Add a QDuplicateTracker<T>::contains()
When even some values I haven't seen may need to be left for later, but values I have seen are definitely to be discarded, I need to know if I've already processed them before doing the fiddly check for whether to defer; but if I decide to defer, I haven't yet processed and need the later check, to which I've deferred, to see the value as still new, even though I did once ask about it before. So I need a way to query without adding to the set. Pick-to: 6.9 6.8 6.5 Change-Id: I712f1c400147210c149aeec6de1d15d2e095d6a9 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
parent
3e29267df0
commit
09b77a8d07
@ -94,6 +94,11 @@ public:
|
|||||||
{
|
{
|
||||||
return !set.insert(std::move(s)).second;
|
return !set.insert(std::move(s)).second;
|
||||||
}
|
}
|
||||||
|
// For when you want to know, but aren't *yet* sure you'll add it:
|
||||||
|
[[nodiscard]] bool contains(const T &s) const
|
||||||
|
{
|
||||||
|
return set.find(s) != set.end(); // TODO C++20: can use set.contains()
|
||||||
|
}
|
||||||
|
|
||||||
template <typename C>
|
template <typename C>
|
||||||
void appendTo(C &c) const &
|
void appendTo(C &c) const &
|
||||||
|
@ -24,12 +24,17 @@ void tst_QDuplicateTracker::hasSeen()
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
QDuplicateTracker<int, 2> tracker;
|
QDuplicateTracker<int, 2> tracker;
|
||||||
|
QVERIFY(!tracker.contains(0));
|
||||||
|
QVERIFY(!tracker.contains(0));
|
||||||
QVERIFY(!tracker.hasSeen(0));
|
QVERIFY(!tracker.hasSeen(0));
|
||||||
QVERIFY(tracker.hasSeen(0));
|
QVERIFY(tracker.hasSeen(0));
|
||||||
|
QVERIFY(tracker.contains(0));
|
||||||
QVERIFY(!tracker.hasSeen(1));
|
QVERIFY(!tracker.hasSeen(1));
|
||||||
QVERIFY(tracker.hasSeen(1));
|
QVERIFY(tracker.hasSeen(1));
|
||||||
// past the prealloc amount
|
// past the prealloc amount
|
||||||
|
QVERIFY(!tracker.contains(2));
|
||||||
QVERIFY(!tracker.hasSeen(2));
|
QVERIFY(!tracker.hasSeen(2));
|
||||||
|
QVERIFY(tracker.contains(2));
|
||||||
QVERIFY(tracker.hasSeen(2));
|
QVERIFY(tracker.hasSeen(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,12 +46,16 @@ void tst_QDuplicateTracker::hasSeen()
|
|||||||
QString string3("string3");
|
QString string3("string3");
|
||||||
|
|
||||||
// Move when seen
|
// Move when seen
|
||||||
|
QVERIFY(!tracker.contains(string1));
|
||||||
QVERIFY(!tracker.hasSeen(string1));
|
QVERIFY(!tracker.hasSeen(string1));
|
||||||
|
QVERIFY(tracker.contains(string1));
|
||||||
QVERIFY(tracker.hasSeen(std::move(string1)));
|
QVERIFY(tracker.hasSeen(std::move(string1)));
|
||||||
|
|
||||||
// Move when unseen
|
// Move when unseen
|
||||||
|
QVERIFY(!tracker.contains(string2));
|
||||||
QVERIFY(!tracker.hasSeen(std::move(string2)));
|
QVERIFY(!tracker.hasSeen(std::move(string2)));
|
||||||
QVERIFY(tracker.hasSeen(string2_2));
|
QVERIFY(tracker.hasSeen(string2_2));
|
||||||
|
QVERIFY(tracker.contains(string2_2));
|
||||||
|
|
||||||
// Past the prealloc amount
|
// Past the prealloc amount
|
||||||
QVERIFY(!tracker.hasSeen(string3));
|
QVERIFY(!tracker.hasSeen(string3));
|
||||||
@ -62,17 +71,19 @@ void tst_QDuplicateTracker::hasSeen()
|
|||||||
|
|
||||||
// Move when seen
|
// Move when seen
|
||||||
QVERIFY(!tracker.hasSeen(string1));
|
QVERIFY(!tracker.hasSeen(string1));
|
||||||
|
QVERIFY(tracker.contains(string1));
|
||||||
QVERIFY(tracker.hasSeen(std::move(string1)));
|
QVERIFY(tracker.hasSeen(std::move(string1)));
|
||||||
|
|
||||||
// Move when unseen
|
// Move when unseen
|
||||||
QVERIFY(!tracker.hasSeen(std::move(string2)));
|
QVERIFY(!tracker.hasSeen(std::move(string2)));
|
||||||
QVERIFY(tracker.hasSeen(string2_2));
|
QVERIFY(tracker.hasSeen(string2_2));
|
||||||
|
QVERIFY(tracker.contains(string2_2));
|
||||||
|
|
||||||
// Past the prealloc amount
|
// Past the prealloc amount
|
||||||
|
QVERIFY(!tracker.contains(string3));
|
||||||
QVERIFY(!tracker.hasSeen(string3));
|
QVERIFY(!tracker.hasSeen(string3));
|
||||||
QVERIFY(tracker.hasSeen(string3));
|
QVERIFY(tracker.hasSeen(string3));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QDuplicateTracker::clear()
|
void tst_QDuplicateTracker::clear()
|
||||||
@ -80,14 +91,18 @@ void tst_QDuplicateTracker::clear()
|
|||||||
QDuplicateTracker<int, 2> tracker;
|
QDuplicateTracker<int, 2> tracker;
|
||||||
QVERIFY(!tracker.hasSeen(0));
|
QVERIFY(!tracker.hasSeen(0));
|
||||||
QVERIFY(tracker.hasSeen(0));
|
QVERIFY(tracker.hasSeen(0));
|
||||||
|
QVERIFY(tracker.contains(0));
|
||||||
|
QVERIFY(!tracker.contains(1));
|
||||||
QVERIFY(!tracker.hasSeen(1));
|
QVERIFY(!tracker.hasSeen(1));
|
||||||
QVERIFY(tracker.hasSeen(1));
|
QVERIFY(tracker.hasSeen(1));
|
||||||
|
|
||||||
tracker.clear();
|
tracker.clear();
|
||||||
|
QVERIFY(!tracker.contains(0));
|
||||||
QVERIFY(!tracker.hasSeen(0));
|
QVERIFY(!tracker.hasSeen(0));
|
||||||
QVERIFY(tracker.hasSeen(0));
|
QVERIFY(tracker.hasSeen(0));
|
||||||
QVERIFY(!tracker.hasSeen(1));
|
QVERIFY(!tracker.hasSeen(1));
|
||||||
QVERIFY(tracker.hasSeen(1));
|
QVERIFY(tracker.hasSeen(1));
|
||||||
|
QVERIFY(tracker.contains(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QDuplicateTracker::appendTo()
|
void tst_QDuplicateTracker::appendTo()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user