74 lines
1.5 KiB
C++
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_ */
|