MCPcopy Create free account
hub / github.com/catboost/catboost / VerComp

Method VerComp

library/cpp/expression/expression_variable.cpp:183–229  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181 return !IsZeroDoubleValue() ? secondOperand.ToStr() : u.ToStr();
182}
183double 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}
230double TExpressionVariable::VerE(const TExpressionVariable& secondOperand) const {
231 /* Сравнение версий по стандарту uatraits:
232 1) Версию мы всегда считаем из первых четырех чисел, остальные игнорируем.

Callers

nothing calls this directly

Calls 6

StringSplitterFunction · 0.85
StripStringFunction · 0.85
TakeMethod · 0.45
SplitMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected