in java/core/src/java/org/apache/orc/impl/mask/RedactMaskFactory.java [468:547]
public long maskLong(long value) {
/* check whether unmasking range provided */
if (!unmaskIndexRanges.isEmpty()) {
return maskLongWithUnmasking(value);
}
long base;
if (DIGIT_REPLACEMENT == 0) {
return 0;
} else if (value >= 0) {
base = 1;
} else {
base = -1;
// make sure Long.MIN_VALUE doesn't overflow
if (value == Long.MIN_VALUE) {
value = Long.MAX_VALUE;
} else {
value = -value;
}
}
if (value < 100_000_000L) {
if (value < 10_000L) {
if (value < 100L) {
if (value < 10L) {
base *= 1;
} else {
base *= 11;
}
} else if (value < 1_000L) {
base *= 111;
} else {
base *= 1_111;
}
} else if (value < 1_000_000L) {
if (value < 100_000L) {
base *= 11_111;
} else {
base *= 111_111;
}
} else if (value < 10_000_000L) {
base *= 1_111_111;
} else {
base *= 11_111_111;
}
} else if (value < 10_000_000_000_000_000L) {
if (value < 1_000_000_000_000L) {
if (value < 10_000_000_000L) {
if (value < 1_000_000_000L) {
base *= 111_111_111;
} else {
base *= 1_111_111_111;
}
} else if (value < 100_000_000_000L) {
base *= 11_111_111_111L;
} else {
base *= 111_111_111_111L;
}
} else if (value < 100_000_000_000_000L) {
if (value < 10_000_000_000_000L) {
base *= 1_111_111_111_111L;
} else {
base *= 11_111_111_111_111L;
}
} else if (value < 1_000_000_000_000_000L) {
base *= 111_111_111_111_111L;
} else {
base *= 1_111_111_111_111_111L;
}
} else if (value < 100_000_000_000_000_000L) {
base *= 11_111_111_111_111_111L;
// If the digit is 9, it would overflow at 19 digits, so use 18.
} else if (value < 1_000_000_000_000_000_000L || DIGIT_REPLACEMENT == 9) {
base *= 111_111_111_111_111_111L;
} else {
base *= 1_111_111_111_111_111_111L;
}
return DIGIT_REPLACEMENT * base;
}