| 181 | return !IsZeroDoubleValue() ? secondOperand.ToStr() : u.ToStr(); |
| 182 | } |
| 183 | double TExpressionVariable::VerComp(const TExpressionVariable& secondOperand, const double firstG, const double secondG) const { |
| 184 | /* Сравнение версий по стандарту uatraits: |
| 185 | 1) Версию мы всегда считаем из первых четырех чисел, остальные игнорируем. |
| 186 | Если меньше четырех, добавляем недостающие нули. |
| 187 | 2) Если в каком-то из операндов мусор, какие-то префиксы или постфиксы, то |
| 188 | операторы <#, <=#, >#, >=# и ==# вернут false, !=# вернёт true. |
| 189 | См. примеры в тестах */ |
| 190 | const auto ss_first = StringSplitter(StripString(StringValue)).Split('.').Take(4); |
| 191 | const auto ss_second = StringSplitter(StripString(secondOperand.StringValue)).Split('.').Take(4); |
| 192 | auto first = ss_first.begin(), second = ss_second.begin(); |
| 193 | ui32 firstValue, secondValue; |
| 194 | |
| 195 | while (first != ss_first.end() && second != ss_second.end()) { |
| 196 | if (!TryFromString<ui32>(*first, firstValue) || !TryFromString<ui32>(*second, secondValue)) { |
| 197 | return 0.0; |
| 198 | } |
| 199 | if (firstValue > secondValue) { |
| 200 | return firstG; |
| 201 | } else if (firstValue < secondValue) { |
| 202 | return secondG; |
| 203 | } |
| 204 | ++first; |
| 205 | ++second; |
| 206 | } |
| 207 | |
| 208 | while (first != ss_first.end()) { |
| 209 | if (!TryFromString<ui32>(*first, firstValue)) { |
| 210 | return 0.0; |
| 211 | } |
| 212 | if (firstValue > 0) { |
| 213 | return firstG; |
| 214 | } |
| 215 | ++first; |
| 216 | } |
| 217 | |
| 218 | while (second != ss_second.end()) { |
| 219 | if (!TryFromString<ui32>(*second, secondValue)) { |
| 220 | return 0.0; |
| 221 | } |
| 222 | if (secondValue > 0) { |
| 223 | return secondG; |
| 224 | } |
| 225 | ++second; |
| 226 | } |
| 227 | |
| 228 | return 0.0; |
| 229 | } |
| 230 | double TExpressionVariable::VerE(const TExpressionVariable& secondOperand) const { |
| 231 | /* Сравнение версий по стандарту uatraits: |
| 232 | 1) Версию мы всегда считаем из первых четырех чисел, остальные игнорируем. |
nothing calls this directly
no test coverage detected