#ifndef UTIL_UTILITY_2012_12_12_H_ #define UTIL_UTILITY_2012_12_12_H_ //***************************************************************************** // (C) Automotive Lighting Reutlingen GmbH // Tuebinger Strasse 123, 72762 Reutlingen, Germany // // Automotive Lighting Reutlingen GmbH owns all the rights to this work. // This work shall not be copied, reproduced, used, modified, transferred // or its information shall not be disclosed without the prior written // authorization of Automotive Lighting Reutlingen GmbH. //***************************************************************************** //----------------------------------------------------------------------------- /// \file UtilUtility.h /// /// \brief Generic utilities /// /// \descr /// /// \author (ksc2rt) /// mailTo: christopher.kormanyos@al-lighting.com //----------------------------------------------------------------------------- // ***************************************************************************** // includes // ***************************************************************************** #include // ***************************************************************************** // macros // ***************************************************************************** #define UTIL_COUNTOF(x) (sizeof(x) / sizeof((x)[0U])) #define UTIL_MAX_OF_TYPE(T) ((T) (((uint64) 0xFFFFFFFFFFFFFFFFULL) >> (64U - (8U * sizeof(T))))) #define UTIL_ABS(a) (((a) < 0) ? (-(a)) : (a)) #define UTIL_LOBYTE(w) ((uint8) (w)) #define UTIL_HIBYTE(w) ((uint8) ((uint16)(w) >> 8U)) #define UTIL_LOWORD(d) ((uint16) (d)) #define UTIL_HIWORD(d) ((uint16) ((uint32) (d) >> 16U)) #define UTIL_MAKEWORD(lo_b,hi_b) ((uint16)(((uint8)(lo_b)) | (((uint16)((uint8)(hi_b))) << 8U))) #define UTIL_MAKEDWORD(lo_w,hi_w) ((uint32)(((uint16)(lo_w)) | (((uint32)((uint16)(hi_w))) << 16U))) #define UTIL_BYTE_MASK_BITS(bpos, count) ((uint8) (((uint8) ((uint8) 0xFFU >> ( 8U - (count)))) << (bpos))) #define UTIL_WORD_MASK_BITS(bpos, count) ((uint16) (((uint16) ((uint16) 0xFFFFU >> (16U - (count)))) << (bpos))) #define UTIL_DWORD_MASK_BITS(bpos, count) ((uint32) (((uint32) ((uint32) 0xFFFFFFFFUL >> (32U - (count)))) << (bpos))) #define UTIL_QWORD_MASK_BITS(bpos, count) ((uint64) (((uint64) ((uint64) 0xFFFFFFFFFFFFFFFFULL >> (64U - (count)))) << (bpos))) #define UTIL_BYTE_MASK_BIT(n) (1UL << (n)) #define UTIL_WORD_MASK_BIT(n) (1UL << (n)) #define UTIL_DWORD_MASK_BIT(n) (1UL << (n)) #define UTIL_QWORD_MASK_BIT(n) (1ULL << (n)) #define UTIL_BYTE_CLEAR_BITS(value, bpos, count) value &= (uint8) ~UTIL_BYTE_MASK_BITS(bpos, count) #define UTIL_WORD_CLEAR_BITS(value, bpos, count) value &= (uint16) ~UTIL_WORD_MASK_BITS(bpos, count) #define UTIL_DWORD_CLEAR_BITS(value, bpos, count) value &= (uint32) ~UTIL_DWORD_MASK_BITS(bpos, count) #define UTIL_QWORD_CLEAR_BITS(value, bpos, count) value &= (uint64) ~UTIL_QWORD_MASK_BITS(bpos, count) #define UTIL_BYTE_SET_BITS(value, bpos, count) value |= (uint8) UTIL_BYTE_MASK_BITS(bpos, count) #define UTIL_WORD_SET_BITS(value, bpos, count) value |= (uint16) UTIL_WORD_MASK_BITS(bpos, count) #define UTIL_DWORD_SET_BITS(value, bpos, count) value |= (uint32) UTIL_DWORD_MASK_BITS(bpos, count) #define UTIL_QWORD_SET_BITS(value, bpos, count) value |= (uint64) UTIL_DWORD_MASK_BITS(bpos, count) #define UTIL_MIN(a, b) ((a) < (b) ? (a) : (b)) #define UTIL_MAX(a, b) ((a) > (b) ? (a) : (b)) #endif // UTIL_UTILITY_2012_12_12_H_