mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-27 19:25:49 +08:00
refs #106, moved removeIf from CSequence to CContainerBase and added remove method in CCollection (CSequence already had a remove method)
This commit is contained in:
@@ -186,6 +186,12 @@ namespace BlackMisc
|
|||||||
*/
|
*/
|
||||||
const_iterator find(const T &value) const { Q_ASSERT(pimpl()); return pimpl()->find(value); }
|
const_iterator find(const T &value) const { Q_ASSERT(pimpl()); return pimpl()->find(value); }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Efficient remove using the find and erase of the implementation container. Typically O(log n).
|
||||||
|
* \pre The sequence must be initialized.
|
||||||
|
*/
|
||||||
|
void remove(const T &object) { auto it = find(object); if (it != end()) { erase(pos); } }
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Test for equality.
|
* \brief Test for equality.
|
||||||
* \todo Improve inefficient implementation.
|
* \todo Improve inefficient implementation.
|
||||||
|
|||||||
@@ -113,6 +113,30 @@ namespace BlackMisc
|
|||||||
return contains(BlackMisc::Predicates::MemberEqual<T>(key1, value1));
|
return contains(BlackMisc::Predicates::MemberEqual<T>(key1, value1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Remove elements for which a given predicate returns true.
|
||||||
|
* \pre The sequence must be initialized.
|
||||||
|
*/
|
||||||
|
template <class Predicate>
|
||||||
|
void removeIf(Predicate p)
|
||||||
|
{
|
||||||
|
for (auto it = derived().begin(); it != derived().end(); ++it)
|
||||||
|
{
|
||||||
|
if (p(*it)) { it = derived().erase(it); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Remove elements matching a particular key/value pair.
|
||||||
|
* \param key1 A pointer to a member function of T.
|
||||||
|
* \param value1 Will be compared to the return value of key1.
|
||||||
|
*/
|
||||||
|
template <class K1, class V1>
|
||||||
|
void removeIf(K1 key1, V1 value1)
|
||||||
|
{
|
||||||
|
removeIf(BlackMisc::Predicates::MemberEqual<T>(key1, value1));
|
||||||
|
}
|
||||||
|
|
||||||
public: // CValueObject overrides
|
public: // CValueObject overrides
|
||||||
/*!
|
/*!
|
||||||
* \copydoc CValueObject::toQVariant()
|
* \copydoc CValueObject::toQVariant()
|
||||||
|
|||||||
@@ -252,27 +252,6 @@ namespace BlackMisc
|
|||||||
applyIf([ & ](const T &value) { return value == pattern; }, newValues);
|
applyIf([ & ](const T &value) { return value == pattern; }, newValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Remove elements for which a given predicate returns true.
|
|
||||||
* \pre The sequence must be initialized.
|
|
||||||
*/
|
|
||||||
template <class Predicate>
|
|
||||||
void removeIf(Predicate p)
|
|
||||||
{
|
|
||||||
erase(std::remove_if(begin(), end(), p), end());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Remove elements matching a particular key/value pair.
|
|
||||||
* \param key1 A pointer to a member function of T.
|
|
||||||
* \param value1 Will be compared to the return value of key1.
|
|
||||||
*/
|
|
||||||
template <class K1, class V1>
|
|
||||||
void removeIf(K1 key1, V1 value1)
|
|
||||||
{
|
|
||||||
removeIf(BlackMisc::Predicates::MemberEqual<T>(key1, value1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Remove the given object, if it is contained.
|
* \brief Remove the given object, if it is contained.
|
||||||
* \pre The sequence must be initialized.
|
* \pre The sequence must be initialized.
|
||||||
|
|||||||
Reference in New Issue
Block a user