Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Models a merge conflict
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #ifndef MERGECONFLICT_HPP_
11 : #define MERGECONFLICT_HPP_
12 :
13 : #include <string>
14 : #include <toolexcept.hpp>
15 :
16 : namespace kdb
17 : {
18 :
19 : namespace tools
20 : {
21 :
22 : namespace merging
23 : {
24 :
25 0 : class InvalidConflictOperation : public ToolException
26 : {
27 : public:
28 0 : explicit InvalidConflictOperation (std::string message) : ToolException (message){};
29 : };
30 :
31 : enum ConflictOperation
32 : {
33 : CONFLICT_ADD, ///< Conflict because of adding key
34 : CONFLICT_DELETE,
35 : CONFLICT_MODIFY,
36 : CONFLICT_META,
37 : CONFLICT_SAME
38 : };
39 :
40 : class MergeConflictOperation
41 : {
42 : public:
43 784 : static std::string getFromTag (enum ConflictOperation operation)
44 : {
45 784 : switch (operation)
46 : {
47 : case CONFLICT_ADD:
48 494 : return "CONFLICT_ADD";
49 : case CONFLICT_DELETE:
50 130 : return "CONFLICT_DELETE";
51 : case CONFLICT_MODIFY:
52 204 : return "CONFLICT_MODIFY";
53 : case CONFLICT_META:
54 24 : return "CONFLICT_META";
55 : case CONFLICT_SAME:
56 716 : return "CONFLICT_SAME";
57 : }
58 :
59 0 : return "unknown";
60 : }
61 :
62 1388 : static ConflictOperation getFromName (std::string name)
63 : {
64 1388 : if (name == "CONFLICT_ADD") return CONFLICT_ADD;
65 926 : if (name == "CONFLICT_DELETE") return CONFLICT_DELETE;
66 804 : if (name == "CONFLICT_MODIFY") return CONFLICT_MODIFY;
67 690 : if (name == "CONFLICT_META") return CONFLICT_META;
68 682 : if (name == "CONFLICT_SAME") return CONFLICT_SAME;
69 0 : throw InvalidConflictOperation ("The conflict operation \"" + name + "\" is unknown");
70 : }
71 : };
72 : } // namespace merging
73 : } // namespace tools
74 : } // namespace kdb
75 :
76 : #endif /* MERGECONFLICT_HPP_ */
|