16#ifndef RAPIDJSON_CLZLL_H_
17#define RAPIDJSON_CLZLL_H_
21#if defined(_MSC_VER) && !defined(UNDER_CE)
24#pragma intrinsic(_BitScanReverse64)
26#pragma intrinsic(_BitScanReverse)
33inline uint32_t clzll(uint64_t x) {
38#if defined(_MSC_VER) && !defined(UNDER_CE)
41 _BitScanReverse64(&r, x);
44 if (_BitScanReverse(&r,
static_cast<uint32_t
>(x >> 32)))
48 _BitScanReverse(&r,
static_cast<uint32_t
>(x & 0xFFFFFFFF));
52#elif (defined(__GNUC__) && __GNUC__ >= 4) || RAPIDJSON_HAS_BUILTIN(__builtin_clzll)
54 return static_cast<uint32_t
>(__builtin_clzll(x));
58 while (!(x & (
static_cast<uint64_t
>(1) << 63))) {
67#define RAPIDJSON_CLZLL RAPIDJSON_NAMESPACE::internal::clzll
#define RAPIDJSON_ASSERT(x)
Assertion.
#define RAPIDJSON_NAMESPACE_BEGIN
provide custom rapidjson namespace (opening expression)
#define RAPIDJSON_NAMESPACE_END
provide custom rapidjson namespace (closing expression)
common definitions and configuration