hash: make operators a class friend

This makes them better discoverable by MSVC from various non-root
namespaces.

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2023-10-01 23:05:08 +02:00
parent dfdc4369b8
commit 06a896ccf6

View File

@ -258,6 +258,37 @@ namespace stdex
{ {
uint8_t data8[16]; uint8_t data8[16];
uint32_t data32[4]; uint32_t data32[4];
inline bool operator !=(_In_ const stdex::md2_t& other) const
{
return
(data32[0] ^ other.data32[0]) |
(data32[1] ^ other.data32[1]) |
(data32[2] ^ other.data32[2]) |
(data32[3] ^ other.data32[3]);
}
inline bool operator ==(_In_ const stdex::md2_t& other) const
{
return !operator !=(other);
}
friend inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::md2_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
friend inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::md2_t& data)
{
if (!stream.ok()) _Unlikely_ return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}
}; };
/// ///
@ -427,6 +458,38 @@ namespace stdex
{ {
uint8_t data8[20]; uint8_t data8[20];
uint32_t data32[5]; uint32_t data32[5];
inline bool operator !=(_In_ const stdex::sha_t& other) const
{
return
(data32[0] ^ other.data32[0]) |
(data32[1] ^ other.data32[1]) |
(data32[2] ^ other.data32[2]) |
(data32[3] ^ other.data32[3]) |
(data32[4] ^ other.data32[4]);
}
inline bool operator ==(_In_ const stdex::sha_t& other) const
{
return !operator !=(other);
}
friend inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::sha_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
friend inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::sha_t data)
{
if (!stream.ok()) _Unlikely_ return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}
}; };
/// ///
@ -544,106 +607,40 @@ namespace stdex
{ {
uint8_t data8[32]; uint8_t data8[32];
uint32_t data32[8]; uint32_t data32[8];
inline bool operator !=(_In_ const stdex::sha256_t& other) const
{
return
(data32[0] ^ other.data32[0]) |
(data32[1] ^ other.data32[1]) |
(data32[2] ^ other.data32[2]) |
(data32[3] ^ other.data32[3]) |
(data32[4] ^ other.data32[4]) |
(data32[5] ^ other.data32[5]) |
(data32[6] ^ other.data32[6]) |
(data32[7] ^ other.data32[7]);
}
inline bool operator ==(_In_ const stdex::sha256_t& other) const
{
return !operator !=(other);
}
friend inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::sha256_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
friend inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::sha256_t& data)
{
if (!stream.ok()) _Unlikely_ return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}
}; };
} }
inline bool operator !=(const stdex::md2_t& odtis1, const stdex::md2_t& odtis2)
{
return
(odtis1.data32[0] ^ odtis2.data32[0]) |
(odtis1.data32[1] ^ odtis2.data32[1]) |
(odtis1.data32[2] ^ odtis2.data32[2]) |
(odtis1.data32[3] ^ odtis2.data32[3]);
}
inline bool operator ==(const stdex::md2_t& odtis1, const stdex::md2_t& odtis2)
{
return !operator !=(odtis1, odtis2);
}
inline bool operator !=(_In_ const stdex::sha_t& odtis1, _In_ const stdex::sha_t& odtis2)
{
return
(odtis1.data32[0] ^ odtis2.data32[0]) |
(odtis1.data32[1] ^ odtis2.data32[1]) |
(odtis1.data32[2] ^ odtis2.data32[2]) |
(odtis1.data32[3] ^ odtis2.data32[3]) |
(odtis1.data32[4] ^ odtis2.data32[4]);
}
inline bool operator ==(_In_ const stdex::sha_t& odtis1, _In_ const stdex::sha_t& odtis2)
{
return !operator !=(odtis1, odtis2);
}
inline bool operator !=(const stdex::sha256_t& odtis1, const stdex::sha256_t& odtis2)
{
return
(odtis1.data32[0] ^ odtis2.data32[0]) |
(odtis1.data32[1] ^ odtis2.data32[1]) |
(odtis1.data32[2] ^ odtis2.data32[2]) |
(odtis1.data32[3] ^ odtis2.data32[3]) |
(odtis1.data32[4] ^ odtis2.data32[4]) |
(odtis1.data32[5] ^ odtis2.data32[5]) |
(odtis1.data32[6] ^ odtis2.data32[6]) |
(odtis1.data32[7] ^ odtis2.data32[7]);
}
inline bool operator ==(const stdex::sha256_t& odtis1, const stdex::sha256_t& odtis2)
{
return !(odtis1 != odtis2);
}
inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::md2_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::md2_t& data)
{
if (!stream.ok()) _Unlikely_
return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}
inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::sha_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::sha_t& data)
{
if (!stream.ok()) _Unlikely_
return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}
inline stdex::stream::basic& operator >>(_Inout_ stdex::stream::basic& stream, _Out_ stdex::sha256_t& data)
{
if (!stream.ok()) _Unlikely_{
memset(&data, 0, sizeof(data));
return stream;
}
stream.read_array(&data, sizeof(data), 1);
return stream;
}
inline stdex::stream::basic& operator <<(_Inout_ stdex::stream::basic& stream, _In_ const stdex::sha256_t& data)
{
if (!stream.ok()) _Unlikely_
return stream;
stream.write_array(&data, sizeof(data), 1);
return stream;
}