Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+103
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* Convert a dds::vector<uint8_t> to a QByteArray
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Christian Ehrlicher, SLSE, 2016-05-03
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef SUPPORT_QBITARRAY
|
||||
# include <QtCore/QBitArray>
|
||||
#endif
|
||||
|
||||
namespace LtsUtils
|
||||
{
|
||||
|
||||
namespace BitArray
|
||||
{
|
||||
constexpr inline int bitNumber(int position)
|
||||
{
|
||||
return 7 - (position % 8); // LSB is left - prefer this to be compatible to TETRA ICD
|
||||
// return (position % 8); // LSB is right
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline bool testBit(const T &bitField, int position, bool *oob = nullptr)
|
||||
{
|
||||
const size_t byteNum = position / 8;
|
||||
if (byteNum >= bitField.size())
|
||||
{
|
||||
if (oob)
|
||||
*oob = true;
|
||||
return false;
|
||||
}
|
||||
if (oob)
|
||||
*oob = false;
|
||||
|
||||
const typename T::value_type mask = 1 << bitNumber(position);
|
||||
return ((bitField.at(byteNum) & mask) == mask);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline bool setBit(T &bitField, int position, bool set = true)
|
||||
{
|
||||
const size_t byteNum = position / 8;
|
||||
if (byteNum >= bitField.size())
|
||||
return false;
|
||||
|
||||
const typename T::value_type mask = 1 << bitNumber(position);
|
||||
if (set)
|
||||
bitField[byteNum] |= mask; // set bit
|
||||
else
|
||||
bitField[byteNum] &= ~mask; // clear bit
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline bool clearBit(T &bitField, int position)
|
||||
{
|
||||
return setBit(bitField, position, false);
|
||||
}
|
||||
|
||||
|
||||
#ifdef SUPPORT_QBITARRAY
|
||||
template<typename T>
|
||||
inline T convert(const QBitArray &bitArray)
|
||||
{
|
||||
T ret;
|
||||
ret.resize((bitArray.size() + 7) / 8, 0);
|
||||
|
||||
for (int i = 0; i < bitArray.size(); ++i)
|
||||
{
|
||||
const size_t byteNum = i / 8;
|
||||
const typename T::value_type mask = (1 << bitNumber(i));
|
||||
if (bitArray[i])
|
||||
ret[byteNum] |= mask; // set bit
|
||||
else
|
||||
ret[byteNum] &= ~mask; // clear bit
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline QBitArray convert(T &bitField, int realSize)
|
||||
{
|
||||
QBitArray ba(realSize);
|
||||
for (int32_t i = 0; i < realSize; ++i)
|
||||
{
|
||||
const size_t byteNum = i / 8;
|
||||
const typename T::value_type mask = (1 << bitNumber(i));
|
||||
bool bit = ((bitField[byteNum] & mask) == mask); // access correct byte and mask correct bit
|
||||
ba[i] = bit;
|
||||
}
|
||||
return ba;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace BitArray
|
||||
|
||||
} // namespace LtsUtils
|
||||
Reference in new issue
Block a user