Coverage Report

Created: 2026-10-28 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}