MCPcopy Create free account
hub / github.com/questdb/questdb / compareTo

Method compareTo

core/src/main/java/io/questdb/std/Decimal256.java:340–399  ·  view source on GitHub ↗

Compare two Decimal256. @return -1, 0, or 1 if a is less than, equal to, or greater than b

(long aHH, long aHL, long aLH, long aLL, int aScale, long bHH, long bHL, long bLH, long bLL, int bScale)

Source from the content-addressed store, hash-verified

338 * @return -1, 0, or 1 if a is less than, equal to, or greater than b
339 */
340 public static int compareTo(long aHH, long aHL, long aLH, long aLL, int aScale, long bHH, long bHL, long bLH, long bLL, int bScale) {
341 if (isNull(aHH, aHL, aLH, aLL)) {
342 if (isNull(bHH, bHL, bLH, bLL)) {
343 return 0;
344 }
345 return -1;
346 }
347 if (isNull(bHH, bHL, bLH, bLL)) {
348 return 1;
349 }
350
351 boolean aNeg = aHH < 0;
352 boolean bNeg = bHH < 0;
353 if (aNeg != bNeg) {
354 return aNeg ? -1 : 1;
355 }
356
357 if (aScale == bScale) {
358 // Same scale - direct comparison
359 return compare(aHH, aHL, aLH, aLL, bHH, bHL, bLH, bLL);
360 }
361
362 if (aNeg) {
363 aLL = ~aLL + 1;
364 long c = aLL == 0L ? 1L : 0L;
365 aLH = ~aLH + c;
366 c = (c == 1L && aLH == 0L) ? 1L : 0L;
367 aHL = ~aHL + c;
368 c = (c == 1L && aHL == 0L) ? 1L : 0L;
369 aHH = ~aHH + c;
370
371 // Negate b
372 bLL = ~bLL + 1;
373 c = bLL == 0L ? 1L : 0L;
374 bLH = ~bLH + c;
375 c = (c == 1L && bLH == 0L) ? 1L : 0L;
376 bHL = ~bHL + c;
377 c = (c == 1L && bHL == 0L) ? 1L : 0L;
378 bHH = ~bHH + c;
379 }
380
381 Decimal256 holder = Misc.getThreadLocalDecimal256();
382 if (aScale < bScale) {
383 holder.of(aHH, aHL, aLH, aLL, aScale);
384 holder.multiplyByPowerOf10InPlace(bScale - aScale);
385 aHH = holder.hh;
386 aHL = holder.hl;
387 aLH = holder.lh;
388 aLL = holder.ll;
389 } else {
390 holder.of(bHH, bHL, bLH, bLL, bScale);
391 holder.multiplyByPowerOf10InPlace(aScale - bScale);
392 bHH = holder.hh;
393 bHL = holder.hl;
394 bLH = holder.lh;
395 bLL = holder.ll;
396 }
397

Callers 6

testCompareToMethod · 0.95
testCompareToFuzzMethod · 0.95
testCompareToScaledMethod · 0.95
testCompareToWithNullMethod · 0.95

Calls 5

isNullMethod · 0.95
compareMethod · 0.95
ofMethod · 0.95

Tested by 6

testCompareToMethod · 0.76
testCompareToFuzzMethod · 0.76
testCompareToScaledMethod · 0.76
testCompareToWithNullMethod · 0.76