Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Models a merge task
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #ifndef MERGETASK_HPP_
11 : #define MERGETASK_HPP_
12 :
13 : #include <kdb.h>
14 :
15 :
16 : namespace kdb
17 : {
18 :
19 : namespace tools
20 : {
21 :
22 : namespace merging
23 : {
24 :
25 8172 : class MergeKeys
26 : {
27 : public:
28 : const KeySet keys;
29 : const Key parent;
30 :
31 : protected:
32 8172 : MergeKeys (const KeySet & _keys, const Key & _parentKey) : keys (_keys), parent (_parentKey)
33 : {
34 2724 : }
35 : };
36 :
37 908 : class BaseMergeKeys : public MergeKeys
38 : {
39 : public:
40 908 : BaseMergeKeys (const KeySet & _keys, const Key & _parentKey) : MergeKeys (_keys, _parentKey)
41 : {
42 : }
43 : };
44 :
45 908 : class TheirMergeKeys : public MergeKeys
46 : {
47 : public:
48 908 : TheirMergeKeys (const KeySet & _keys, const Key & _parentKey) : MergeKeys (_keys, _parentKey)
49 : {
50 : }
51 : };
52 :
53 908 : class OurMergeKeys : public MergeKeys
54 : {
55 : public:
56 908 : OurMergeKeys (const KeySet & _keys, const Key & _parentKey) : MergeKeys (_keys, _parentKey)
57 : {
58 : }
59 : };
60 :
61 : class MergeTask
62 : {
63 : public:
64 : KeySet base;
65 : KeySet ours;
66 : KeySet theirs;
67 : Key baseParent;
68 : Key ourParent;
69 : Key theirParent;
70 : Key mergeRoot;
71 :
72 : /**
73 : * @param _base the KeySet containing the base keys and the base parentKey
74 : * @param _ours the KeySet containing our keys and our parentKey
75 : * @param _theirs the KeySet containing their keys and their parentKey
76 : * @param _mergeRoot the parentKey for the merged keys
77 : */
78 908 : MergeTask (const BaseMergeKeys & _base, const OurMergeKeys & _ours, const TheirMergeKeys & _theirs, const Key & _mergeRoot)
79 908 : : base (_base.keys), ours (_ours.keys), theirs (_theirs.keys), baseParent (_base.parent), ourParent (_ours.parent),
80 7264 : theirParent (_theirs.parent), mergeRoot (_mergeRoot)
81 : {
82 908 : }
83 :
84 908 : ~MergeTask ()
85 7264 : {
86 908 : }
87 :
88 434 : MergeTask reverse () const
89 : {
90 3038 : return MergeTask (BaseMergeKeys (base, baseParent), OurMergeKeys (theirs, theirParent), TheirMergeKeys (ours, ourParent),
91 1302 : mergeRoot);
92 : }
93 : };
94 : } // namespace merging
95 : } // namespace tools
96 : } // namespace kdb
97 :
98 : #endif /* MERGETASK_HPP_ */
|