template INLINE int64 DataReaderImpl::getCompressedNanoTimeDividedBy()

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");
    }
}