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