in gflog-core/src/main/java/com/epam/deltix/gflog/core/util/Formatting.java [195:251]
static {
final int prePadding = 2 * DOUBLE_CACHE_LINE_SIZE; // for alignment
final int postPadding = DOUBLE_CACHE_LINE_SIZE;
final int ulongMultiplierTableSpace = ULONG_MULTIPLIER_TABLE.length * SIZE_OF_LONG;
final int uintMultiplierTableSpace = UINT_MULTIPLIER_TABLE.length * SIZE_OF_INT;
final int uintLengthTableSpace = UINT_LENGTH_TABLE.length;
final int digitsTableSpace = 100 * SIZE_OF_SHORT;
final int monthToDaysTableSpace = MONTH_TO_DAYS_TABLE.length * SIZE_OF_SHORT;
final int monthToDaysLeapTableSpace = MONTH_TO_DAYS_LEAP_TABLE.length * SIZE_OF_SHORT;
final int daysToMonthTableSpace = DAYS_TO_MONTH_TABLE.length;
final int daysToMonthLeapTableSpace = DAYS_TO_MONTH_LEAP_TABLE.length;
final int memorySpace = prePadding +
ulongMultiplierTableSpace + uintMultiplierTableSpace + align(uintLengthTableSpace, SIZE_OF_SHORT) +
digitsTableSpace +
monthToDaysTableSpace + monthToDaysLeapTableSpace +
daysToMonthTableSpace + daysToMonthLeapTableSpace +
postPadding;
final Buffer buffer = UnsafeBuffer.allocateDirectedAlignedPadded(memorySpace, DOUBLE_CACHE_LINE_SIZE);
final long memoryAddress = buffer.address();
BUFFER_REFERENCE = buffer;
ADDRESS_OF_ULONG_MULTIPLIER_TABLE = align(memoryAddress + DOUBLE_CACHE_LINE_SIZE, DOUBLE_CACHE_LINE_SIZE);
ADDRESS_OF_UINT_MULTIPLIER_TABLE = ADDRESS_OF_ULONG_MULTIPLIER_TABLE + ulongMultiplierTableSpace;
ADDRESS_OF_UINT_LENGTH_TABLE = ADDRESS_OF_UINT_MULTIPLIER_TABLE + uintMultiplierTableSpace;
ADDRESS_OF_DIGITS_TABLE = align(ADDRESS_OF_UINT_LENGTH_TABLE + uintLengthTableSpace, SIZE_OF_SHORT);
ADDRESS_OF_DAYS_TO_MONTH_TABLE = ADDRESS_OF_DIGITS_TABLE + digitsTableSpace;
ADDRESS_OF_DAYS_TO_MONTH_LEAP_TABLE = ADDRESS_OF_DAYS_TO_MONTH_TABLE + daysToMonthTableSpace;
ADDRESS_OF_MONTH_TO_DAYS_TABLE = ADDRESS_OF_DAYS_TO_MONTH_LEAP_TABLE + daysToMonthLeapTableSpace;
ADDRESS_OF_MONTH_TO_DAYS_LEAP_TABLE = ADDRESS_OF_MONTH_TO_DAYS_TABLE + monthToDaysTableSpace;
UNSAFE.copyMemory(ULONG_MULTIPLIER_TABLE, ARRAY_LONG_BASE_OFFSET, null, ADDRESS_OF_ULONG_MULTIPLIER_TABLE, ulongMultiplierTableSpace);
UNSAFE.copyMemory(UINT_MULTIPLIER_TABLE, ARRAY_INT_BASE_OFFSET, null, ADDRESS_OF_UINT_MULTIPLIER_TABLE, uintMultiplierTableSpace);
UNSAFE.copyMemory(UINT_LENGTH_TABLE, ARRAY_BYTE_BASE_OFFSET, null, ADDRESS_OF_UINT_LENGTH_TABLE, uintLengthTableSpace);
UNSAFE.copyMemory(DAYS_TO_MONTH_TABLE, ARRAY_BYTE_BASE_OFFSET, null, ADDRESS_OF_DAYS_TO_MONTH_TABLE, daysToMonthTableSpace);
UNSAFE.copyMemory(DAYS_TO_MONTH_LEAP_TABLE, ARRAY_BYTE_BASE_OFFSET, null, ADDRESS_OF_DAYS_TO_MONTH_LEAP_TABLE, daysToMonthLeapTableSpace);
UNSAFE.copyMemory(MONTH_TO_DAYS_TABLE, ARRAY_SHORT_BASE_OFFSET, null, ADDRESS_OF_MONTH_TO_DAYS_TABLE, monthToDaysTableSpace);
UNSAFE.copyMemory(MONTH_TO_DAYS_LEAP_TABLE, ARRAY_SHORT_BASE_OFFSET, null, ADDRESS_OF_MONTH_TO_DAYS_LEAP_TABLE, monthToDaysLeapTableSpace);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final int index = (10 * i + j) * SIZE_OF_SHORT;
final int firstDigit = i + '0';
final int secondDigit = j + '0';
UNSAFE.putShort(ADDRESS_OF_DIGITS_TABLE + index, makeShort(firstDigit, secondDigit));
}
}
}