PIByteArray operators & | ^

PIDigest add BLAKE2 algorithms and HMAC
This commit is contained in:
2024-11-27 18:27:51 +03:00
parent 0c973f0216
commit 3a159b0553
15 changed files with 2545 additions and 2 deletions

View File

@@ -1238,6 +1238,39 @@ inline bool operator!=(const PIByteArray & v0, const PIByteArray & v1) {
return true;
}
//! \relatesalso PIByteArray
//! \~english Returns bit-wise "and". If non-equal size, then returns empty %PIByteArray.
//! \~russian Возвращает по-битовое "и" Если размеры не совпадают, возвращает пустой %PIByteArray.
inline PIByteArray operator&(const PIByteArray & v0, const PIByteArray & v1) {
if (v0.size() != v1.size()) return {};
PIByteArray ret(v0.size(), 0);
for (uint i = 0; i < v0.size(); ++i)
ret[i] = v0[i] & v1[i];
return ret;
}
//! \relatesalso PIByteArray
//! \~english Returns bit-wise "or". If non-equal size, then returns empty %PIByteArray.
//! \~russian Возвращает по-битовое "или" Если размеры не совпадают, возвращает пустой %PIByteArray.
inline PIByteArray operator|(const PIByteArray & v0, const PIByteArray & v1) {
if (v0.size() != v1.size()) return {};
PIByteArray ret(v0.size(), 0);
for (uint i = 0; i < v0.size(); ++i)
ret[i] = v0[i] | v1[i];
return ret;
}
//! \relatesalso PIByteArray
//! \~english Returns bit-wise "xor". If non-equal size, then returns empty %PIByteArray.
//! \~russian Возвращает по-битовое "исключающее или" Если размеры не совпадают, возвращает пустой %PIByteArray.
inline PIByteArray operator^(const PIByteArray & v0, const PIByteArray & v1) {
if (v0.size() != v1.size()) return {};
PIByteArray ret(v0.size(), 0);
for (uint i = 0; i < v0.size(); ++i)
ret[i] = v0[i] ^ v1[i];
return ret;
}
#ifdef PIP_STD_IOSTREAM
//! \relatesalso PIByteArray \brief Output to std::ostream operator
inline std::ostream & operator<<(std::ostream & s, const PIByteArray & ba);