26 QVector<QVector<T>> mChains;
27 std::function<bool(
const T& pChild,
const T& pParent)> mIsChildFunc;
29 void buildChain(
const QVector<T>& pAllElements,
const QVector<T>& pChain)
31 bool chainComplete =
true;
33 for (
const auto& elem : pAllElements)
35 if (pChain.contains(elem))
40 if (mIsChildFunc(elem, pChain.last()))
42 QVector<T> extendedChain(pChain);
43 extendedChain += elem;
44 buildChain(pAllElements, extendedChain);
45 chainComplete =
false;
47 else if (mIsChildFunc(pChain.first(), elem))
49 QVector<T> extendedChain({elem});
50 extendedChain += pChain;
51 buildChain(pAllElements, extendedChain);
52 chainComplete =
false;
56 if (chainComplete && !isSubChain(pChain))
63 bool isSubChain(
const QVector<T>& pSubChain)
65 return std::any_of(mChains.constBegin(), mChains.constEnd(), [&pSubChain] (
const QVector<T>& pChain) {
66 return std::search(pChain.constBegin(), pChain.constEnd(), pSubChain.constBegin(), pSubChain.constEnd())
74 return QMutableVectorIterator<QVector<T>>(mChains);
78 ChainBuilder(
const QVector<T>& pAllElements,
const std::function<
bool(
const T& pChild,
const T& pParent)>& pIsChildFunc)
80 , mIsChildFunc(pIsChildFunc)
82 for (
const auto& elem : pAllElements)
84 const QVector<T> chain({elem});
85 if (!isSubChain(chain))
87 buildChain(pAllElements, chain);
Definition: ChainBuilder.h:24
ChainBuilder(const QVector< T > &pAllElements, const std::function< bool(const T &pChild, const T &pParent)> &pIsChildFunc)
Definition: ChainBuilder.h:78
QMutableVectorIterator< QVector< T > > getChainIterator()
Definition: ChainBuilder.h:72
const QVector< QVector< T > > & getChains() const
Definition: ChainBuilder.h:93
#define T(v)
Definition: http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16