in src/dxapi/native/tickdb/data_reader.cpp [662:695]
template <int64 N> INLINE int64 DataReaderInternal::getCompressedNanoTimeDividedBy()
{
byte header = getByte();
int64 lowBits = header & 0x1F;
switch ((TimestampGranularity)(header >> 5) /* scale */) {
case TimestampGranularity::MILLIS:
return (((_loadLE<uint64>(bytes(5)) & BYTEMASK_L(5)) << 5) + lowBits) * (TIME_NANOS_PER_MILLISECOND / N) + COMPRESSED_TIMESTAMP_BASE_NS / N;
case TimestampGranularity::SECONDS:
return ((_loadLE<uint32>(bytes(4)) << 5) + lowBits) * (TIME_NANOS_PER_SECOND / N) + COMPRESSED_TIMESTAMP_BASE_NS / N;
case TimestampGranularity::TEN_SECONDS:
return (((_loadLE<uint32>(bytes(3)) & BYTEMASK_L(3)) << 5) + lowBits) * ((TIME_NANOS_PER_SECOND * 10) / N) + COMPRESSED_TIMESTAMP_BASE_NS / N;
case TimestampGranularity::HOURS:
return ((_loadLE<uint16>(bytes(2)) << 5) + lowBits) * (TIME_NANOS_PER_HOUR / N) + COMPRESSED_TIMESTAMP_BASE_NS / N;
case TimestampGranularity::NANOS:
return ((((_loadLE<uint64>(bytes(7)) & BYTEMASK_L(7)) << 5) + lowBits) + COMPRESSED_TIMESTAMP_BASE_MS) / N;
case TimestampGranularity::LONG_NANOS:
return (((_loadLE<uint64>(bytes(8)) << 5) + lowBits) + COMPRESSED_TIMESTAMP_BASE_MS ) / N;
case TimestampGranularity::SPECIAL:
if (0 == lowBits) {
return TIMESTAMP_NULL;
}
// fall through
default:
case TimestampGranularity::INVALID:
THROW_DBGLOG("getCompressedTimestamp() : Invalid timestamp data");
}
}