Files
Geely/libs/Utils.h

74 lines
1.5 KiB
C++

/*
* Utils.h
*
* Created on: 29 мая 2015 г.
* Author: esaulenko
*/
#ifndef UTILS_H_
#define UTILS_H_
#include <cstdint>
#include "IO.h"
uint32_t constexpr BIT (uint32_t n)
{ return 1UL << n; }
uint64_t constexpr BIT64 (uint32_t n)
{ return 1ULL << n; }
template <typename T1, typename T2> uint32_t MAX (T1 a, T2 b)
{
if (a > b) return a;
else return b;
}
template <typename T1, typename T2> uint32_t MIN (T1 a, T2 b)
{
if (a > b) return b;
else return a;
}
#define countof(array) (sizeof(array)/sizeof(array[0]))
// установка/снятие бита
template <typename T> void BSET (T &x, uint32_t bitNo) ///< установить бит
{ x |= BIT64 (bitNo); }
template <typename T> void BCLR (T &x, uint32_t bitNo) ///< стереть бит
{ x &= ~BIT64 (bitNo); }
///< определить (стереть (Value=0) или установить(Value=1)) бит
template <typename T> void BDEF (T &x, uint32_t bitNo, uint32_t Value)
{
if (Value) BSET (x, bitNo);
else BCLR (x, bitNo);
}
// возвращает номер старшего бита
constexpr int8_t bitmask2offset (uint32_t val)
{
return (int8_t) ( (val > 1) ? ( bitmask2offset (val/2) + 1 ) : 0 );
}
// управление последовательностями
// использовать в CoreFunc->RunSequence()
#define SEQ(x,y) CIO::x, CSettings::y-CSettings::seqOFFSET
#endif /* UTILS_H_ */