AusweisApp
Lade ...
Suche ...
Keine Treffer
ChainBuilder.h
gehe zur Dokumentation dieser Datei
1
13#pragma once
14
15#include <QList>
16#include <algorithm>
17#include <functional>
18
19
20namespace governikus
21{
22
23template<typename T>
25{
26 private:
27 QList<QList<T>> mChains;
28 std::function<bool(const T& pChild, const T& pParent)> mIsChildFunc;
29
30 void buildChain(const QList<T>& pAllElements, const QList<T>& pChain)
31 {
32 bool chainComplete = true;
33
34 for (const auto& elem : pAllElements)
35 {
36 if (pChain.contains(elem))
37 {
38 continue;
39 }
40
41 if (mIsChildFunc(elem, pChain.last()))
42 {
43 QList<T> extendedChain(pChain);
45 buildChain(pAllElements, extendedChain);
46 chainComplete = false;
47 }
48 else if (mIsChildFunc(pChain.first(), elem))
49 {
50 QList<T> extendedChain({elem});
52 buildChain(pAllElements, extendedChain);
53 chainComplete = false;
54 }
55 }
56
57 if (chainComplete && !isSubChain(pChain))
58 {
59 mChains += pChain;
60 }
61 }
62
63
64 bool isSubChain(const QList<T>& pSubChain)
65 {
66 return std::any_of(mChains.constBegin(), mChains.constEnd(), [&pSubChain] (const QList<T>& pChain) {
67 return std::search(pChain.constBegin(), pChain.constEnd(), pSubChain.constBegin(), pSubChain.constEnd())
68 != pChain.constEnd();
69 });
70 }
71
72 protected:
77
78 public:
79 ChainBuilder(const QList<T>& pAllElements, const std::function<bool(const T& pChild, const T& pParent)>& pIsChildFunc)
80 : mChains()
81 , mIsChildFunc(pIsChildFunc)
82 {
83 for (const auto& elem : pAllElements)
84 {
85 const QList<T> chain({elem});
86 if (!isSubChain(chain))
87 {
88 buildChain(pAllElements, chain);
89 }
90 }
91 }
92
93
94 const QList<QList<T>>& getChains() const
95 {
96 return mChains;
97 }
98
99
100};
101
102
103} // namespace governikus
Definition ChainBuilder.h:25
const QList< QList< T > > & getChains() const
Definition ChainBuilder.h:94
QMutableListIterator< QList< T > > getChainIterator()
Definition ChainBuilder.h:73
ChainBuilder(const QList< T > &pAllElements, const std::function< bool(const T &pChild, const T &pParent)> &pIsChildFunc)
Definition ChainBuilder.h:79
#define T(v)
Definition http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition CommandApdu.h:17
QSharedPointer< T > decodeObject(const QByteArray &pData, bool pLogging=true)
Template function for decoding an OpenSSL type from DER encoded QByteArray.
Definition ASN1TemplateUtil.h:114