mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-23 23:45:35 +08:00
getMachinesUnique() returns a list of identifiers reduced to maximum one per machine. If there is more than one per machine, it is undefined which one will be returned. refs #881
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
/* Copyright (C) 2015
|
|
* swift project Community / Contributors
|
|
*
|
|
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
|
|
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
|
|
* including this file, may be copied, modified, propagated, or distributed except according to the terms
|
|
* contained in the LICENSE file.
|
|
*/
|
|
|
|
#include "blackmisc/compare.h"
|
|
#include "blackmisc/identifierlist.h"
|
|
|
|
#include <QString>
|
|
#include <tuple>
|
|
|
|
namespace BlackMisc
|
|
{
|
|
CIdentifierList::CIdentifierList() { }
|
|
|
|
CIdentifierList::CIdentifierList(const CSequence<BlackMisc::CIdentifier> &other) :
|
|
CSequence<BlackMisc::CIdentifier>(other)
|
|
{ }
|
|
|
|
bool CIdentifierList::containsAnyNotIn(const CIdentifierList &other) const
|
|
{
|
|
return containsBy([&other](const CIdentifier & id) { return ! other.contains(id); });
|
|
}
|
|
|
|
CIdentifierList CIdentifierList::getMachinesUnique() const
|
|
{
|
|
CIdentifierList il;
|
|
for (const CIdentifier &identifier : *this)
|
|
{
|
|
bool contained = il.containsBy([ = ] (const CIdentifier &ident)
|
|
{
|
|
return identifier.isFromSameMachine(ident);
|
|
});
|
|
if (!contained) { il.push_back(identifier); }
|
|
}
|
|
return il;
|
|
}
|
|
|
|
QStringList CIdentifierList::getMachineNames(bool unique, bool sort) const
|
|
{
|
|
QStringList codes = this->transform(Predicates::MemberTransform(&CIdentifier::getMachineName));
|
|
if (sort) { codes.sort(); }
|
|
if (unique) { codes.removeDuplicates(); }
|
|
return codes;
|
|
}
|
|
|
|
int CIdentifierList::removeDuplicates()
|
|
{
|
|
if (this->size() < 2) { return 0; }
|
|
CIdentifierList il;
|
|
for (const CIdentifier &identifier : *this)
|
|
{
|
|
if (il.contains(identifier)) continue;
|
|
il.push_back(identifier);
|
|
}
|
|
const int delta = this->size() - il.size();
|
|
if (delta == 0) { return 0; }
|
|
*this = il;
|
|
return delta;
|
|
}
|
|
} // namespace
|