From af425358e31328613359582fc77542d038a88181 Mon Sep 17 00:00:00 2001 From: Yury Melnichek Date: Thu, 30 Dec 2010 02:25:47 +0100 Subject: [PATCH] Add macros to construct uints and get their low and hi parts. --- base/macros.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/base/macros.hpp b/base/macros.hpp index f4ac174005..573cae3bab 100644 --- a/base/macros.hpp +++ b/base/macros.hpp @@ -1,4 +1,5 @@ #pragma once +#include "base.hpp" namespace my { @@ -48,3 +49,21 @@ namespace my #define PREDICT_TRUE(x) (x) #define PREDICT_FALSE(x) (x) #endif + +#define UINT16_FROM_UINT8(hi, lo) ((static_cast(hi) << 8) | lo) +#define UINT32_FROM_UINT16(hi, lo) ((static_cast(hi) << 16) | lo) +#define UINT64_FROM_UINT32(hi, lo) ((static_cast(hi) << 32) | lo) + +#define UINT32_FROM_UINT8(u3, u2, u1, u0) \ + UINT32_FROM_UINT16(UINT16_FROM_UINT8(u3, u2), UINT16_FROM_UINT8(u1, u0)) +#define UINT64_FROM_UINT8(u7, u6, u5, u4, u3, u2, u1, u0) \ + UINT64_FROM_UINT32(UINT32_FROM_UINT8(u7, u6, u5, u4), UINT32_FROM_UINT8(u3, u2, u1, u0)) + +#define UINT16_LO(x) (static_cast(x & 0xFF)) +#define UINT16_HI(x) (static_cast(x >> 8)) +#define UINT32_LO(x) (static_cast(x & 0xFFFF)) +#define UINT32_HI(x) (static_cast(x >> 16)) +#define UINT64_LO(x) (static_cast(x & 0xFFFFFFFF)) +#define UINT64_HI(x) (static_cast(x >> 32)) + +