/src/CMake/Source/cmValue.cxx
Line | Count | Source |
1 | | |
2 | | #include "cmValue.h" |
3 | | |
4 | | #include <ostream> |
5 | | #include <string> |
6 | | |
7 | | #include <cmext/string_view> |
8 | | |
9 | | #include "cmStringAlgorithms.h" |
10 | | |
11 | | namespace { |
12 | | std::string True{ "1" }; |
13 | | std::string False{ "0" }; |
14 | | } |
15 | | |
16 | | cmValue cmValue::True{ ::True }; |
17 | | cmValue cmValue::False{ ::False }; |
18 | | |
19 | | std::string cmValue::Empty; |
20 | | |
21 | | bool cmValue::IsOn(cm::string_view value) noexcept |
22 | 12.0k | { |
23 | 12.0k | switch (value.size()) { |
24 | 134 | case 1: |
25 | 134 | return value[0] == '1' || value[0] == 'Y' || value[0] == 'y'; |
26 | 47 | case 2: |
27 | 47 | return // |
28 | 47 | (value[0] == 'O' || value[0] == 'o') && // |
29 | 47 | (value[1] == 'N' || value[1] == 'n'); |
30 | 0 | case 3: |
31 | 0 | return // |
32 | 0 | (value[0] == 'Y' || value[0] == 'y') && // |
33 | 0 | (value[1] == 'E' || value[1] == 'e') && // |
34 | 0 | (value[2] == 'S' || value[2] == 's'); |
35 | 5.92k | case 4: |
36 | 5.92k | return // |
37 | 5.92k | (value[0] == 'T' || value[0] == 't') && // |
38 | 5.92k | (value[1] == 'R' || value[1] == 'r') && // |
39 | 5.92k | (value[2] == 'U' || value[2] == 'u') && // |
40 | 5.92k | (value[3] == 'E' || value[3] == 'e'); |
41 | 5.92k | default: |
42 | 5.92k | break; |
43 | 12.0k | } |
44 | | |
45 | 5.92k | return false; |
46 | 12.0k | } |
47 | | |
48 | | bool cmValue::IsOff(cm::string_view value) noexcept |
49 | 209 | { |
50 | 209 | switch (value.size()) { |
51 | 20 | case 0: |
52 | 20 | return true; |
53 | 24 | case 1: |
54 | 24 | return value[0] == '0' || value[0] == 'N' || value[0] == 'n'; |
55 | 9 | case 2: |
56 | 9 | return // |
57 | 9 | (value[0] == 'N' || value[0] == 'n') && // |
58 | 0 | (value[1] == 'O' || value[1] == 'o'); |
59 | 20 | case 3: |
60 | 20 | return // |
61 | 20 | (value[0] == 'O' || value[0] == 'o') && // |
62 | 16 | (value[1] == 'F' || value[1] == 'f') && // |
63 | 0 | (value[2] == 'F' || value[2] == 'f'); |
64 | 12 | case 5: |
65 | 12 | return // |
66 | 12 | (value[0] == 'F' || value[0] == 'f') && // |
67 | 0 | (value[1] == 'A' || value[1] == 'a') && // |
68 | 0 | (value[2] == 'L' || value[2] == 'l') && // |
69 | 0 | (value[3] == 'S' || value[3] == 's') && // |
70 | 0 | (value[4] == 'E' || value[4] == 'e'); |
71 | 10 | case 6: |
72 | 10 | return // |
73 | 10 | (value[0] == 'I' || value[0] == 'i') && // |
74 | 0 | (value[1] == 'G' || value[1] == 'g') && // |
75 | 0 | (value[2] == 'N' || value[2] == 'n') && // |
76 | 0 | (value[3] == 'O' || value[3] == 'o') && // |
77 | 0 | (value[4] == 'R' || value[4] == 'r') && // |
78 | 0 | (value[5] == 'E' || value[5] == 'e'); |
79 | 114 | default: |
80 | 114 | break; |
81 | 209 | } |
82 | | |
83 | 114 | return IsNOTFOUND(value); |
84 | 209 | } |
85 | | |
86 | | bool cmValue::IsNOTFOUND(cm::string_view value) noexcept |
87 | 11.9k | { |
88 | 11.9k | return (value == "NOTFOUND"_s) || cmHasSuffix(value, "-NOTFOUND"_s); |
89 | 11.9k | } |
90 | | |
91 | | bool cmValue::IsInternallyOn(cm::string_view value) noexcept |
92 | 0 | { |
93 | 0 | return (value.size() == 4) && // |
94 | 0 | (value[0] == 'I' || value[0] == 'i') && // |
95 | 0 | (value[1] == '_') && // |
96 | 0 | (value[2] == 'O' || value[2] == 'o') && // |
97 | 0 | (value[3] == 'N' || value[3] == 'n'); |
98 | 0 | } |
99 | | |
100 | | int cmValue::Compare(cmValue value) const noexcept |
101 | 5.92k | { |
102 | 5.92k | if (!this->Value && !value) { |
103 | 5.92k | return 0; |
104 | 5.92k | } |
105 | 0 | if (!this->Value) { |
106 | 0 | return -1; |
107 | 0 | } |
108 | 0 | if (!value) { |
109 | 0 | return 1; |
110 | 0 | } |
111 | 0 | return this->Value->compare(*value); |
112 | 0 | } |
113 | | |
114 | | int cmValue::Compare(cm::string_view value) const noexcept |
115 | 1.62k | { |
116 | 1.62k | if (!this->Value && !value.data()) { |
117 | 0 | return 0; |
118 | 0 | } |
119 | 1.62k | if (!this->Value) { |
120 | 1.62k | return -1; |
121 | 1.62k | } |
122 | 0 | if (!value.data()) { |
123 | 0 | return 1; |
124 | 0 | } |
125 | 0 | return cm::string_view(*this->Value).compare(value); |
126 | 0 | } |
127 | | |
128 | | std::ostream& operator<<(std::ostream& o, cmValue v) |
129 | 0 | { |
130 | 0 | o << *v; |
131 | 0 | return o; |
132 | 0 | } |