/* * Utils.h * * Created on: 29 мая 2015 г. * Author: esaulenko */ #ifndef UTILS_H_ #define UTILS_H_ #include #include "IO.h" uint32_t constexpr BIT (uint32_t n) { return 1UL << n; } uint64_t constexpr BIT64 (uint32_t n) { return 1ULL << n; } template uint32_t MAX (T1 a, T2 b) { if (a > b) return a; else return b; } template uint32_t MIN (T1 a, T2 b) { if (a > b) return b; else return a; } #define countof(array) (sizeof(array)/sizeof(array[0])) // установка/снятие бита template void BSET (T &x, uint32_t bitNo) ///< установить бит { x |= BIT64 (bitNo); } template void BCLR (T &x, uint32_t bitNo) ///< стереть бит { x &= ~BIT64 (bitNo); } ///< определить (стереть (Value=0) или установить(Value=1)) бит template 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_ */