public static int formatULong10Digits()

in gflog-core/src/main/java/com/epam/deltix/gflog/core/util/Formatting.java [1249:1283]


    public static int formatULong10Digits(@Nonnegative long value, final @Nonnull byte[] array, @Nonnegative int offset) {
        // Preconditions:
        // assert value >= 0 && value <= 9999999999;
        // assert array != null;
        // assert offset >= 0;

        final long left = value / 100_000_000;

        short digits = UNSAFE.getShort(ADDRESS_OF_DIGITS_TABLE + (left << 1));
        UNSAFE.putShort(array, ARRAY_BYTE_BASE_OFFSET + offset, digits);

        long right = value - 100_000_000 * left;
        long rightNew = 2748779070L * right >>> 38;
        long rightRemainder = right - 100 * rightNew;

        digits = UNSAFE.getShort(ADDRESS_OF_DIGITS_TABLE + (rightRemainder << 1));
        UNSAFE.putShort(array, ARRAY_BYTE_BASE_OFFSET + offset + 8, digits);

        right = 2748779070L * rightNew >>> 38;
        rightRemainder = rightNew - 100 * right;

        digits = UNSAFE.getShort(ADDRESS_OF_DIGITS_TABLE + (rightRemainder << 1));
        UNSAFE.putShort(array, ARRAY_BYTE_BASE_OFFSET + offset + 6, digits);

        rightNew = (int) (2748779070L * right >>> 38);
        rightRemainder = right - 100 * rightNew;

        digits = UNSAFE.getShort(ADDRESS_OF_DIGITS_TABLE + (rightRemainder << 1));
        UNSAFE.putShort(array, ARRAY_BYTE_BASE_OFFSET + offset + 4, digits);

        digits = UNSAFE.getShort(ADDRESS_OF_DIGITS_TABLE + (rightNew << 1));
        UNSAFE.putShort(array, ARRAY_BYTE_BASE_OFFSET + offset + 2, digits);

        return offset + 10;
    }