AusweisApp2
Lade ...
Suche ...
Keine Treffer
ChainBuilder.h
gehe zur Dokumentation dieser Datei
1
11#pragma once
12
13
14#include <algorithm>
15#include <functional>
16#include <QVector>
17
18
19namespace governikus
20{
21
22template<typename T>
24{
25 protected:
26 QVector<QVector<T>> mChains;
27
28 private:
29 std::function<bool(const T& pChild, const T& pParent)> mIsChildFunc;
30
31 void buildChain(const QVector<T>& pAllElements, const QVector<T>& pChain)
32 {
33 bool chainComplete = true;
34
35 for (const auto& elem : pAllElements)
36 {
37 if (pChain.contains(elem))
38 {
39 continue;
40 }
41
42 if (mIsChildFunc(elem, pChain.last()))
43 {
44 QVector<T> extendedChain(pChain);
45 extendedChain += elem;
46 buildChain(pAllElements, extendedChain);
47 chainComplete = false;
48 }
49 else if (mIsChildFunc(pChain.first(), elem))
50 {
51 QVector<T> extendedChain({elem});
52 extendedChain += pChain;
53 buildChain(pAllElements, extendedChain);
54 chainComplete = false;
55 }
56 }
57
58 if (chainComplete && !isSubChain(pChain))
59 {
60 mChains += pChain;
61 }
62 }
63
64
65 bool isSubChain(const QVector<T>& pSubChain)
66 {
67 for (const auto& chain : qAsConst(mChains))
68 {
69 if (std::search(chain.begin(), chain.end(), pSubChain.begin(), pSubChain.end()) != chain.end())
70 {
71 return true;
72 }
73 }
74 return false;
75 }
76
77 public:
78 ChainBuilder(const QVector<T>& pAllElements, const std::function<bool(const T& pChild, const T& pParent)>& pIsChildFunc)
79 : mChains()
80 , mIsChildFunc(pIsChildFunc)
81 {
82 for (const auto& elem : pAllElements)
83 {
84 const QVector<T> chain({elem});
85 if (!isSubChain(chain))
86 {
87 buildChain(pAllElements, chain);
88 }
89 }
90 }
91
92
93 const QVector<QVector<T>>& getChains() const
94 {
95 return mChains;
96 }
97
98
99};
100
101
102} // namespace governikus
Definition: ChainBuilder.h:24
ChainBuilder(const QVector< T > &pAllElements, const std::function< bool(const T &pChild, const T &pParent)> &pIsChildFunc)
Definition: ChainBuilder.h:78
QVector< QVector< T > > mChains
Definition: ChainBuilder.h:26
const QVector< QVector< T > > & getChains() const
Definition: ChainBuilder.h:93
#define T(v)
Definition: http_parser.cpp:237
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:15