mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-06-06 23:53:29 +00:00
DNACommon: Mark hash overloads as noexcept
These functions shouldn't throw at all. By extension, also mark the UniqueID class interfaces as noexcept.
This commit is contained in:
parent
96fa7af8b5
commit
d337327b97
@ -118,40 +118,40 @@ public:
|
|||||||
using value_type = uint32_t;
|
using value_type = uint32_t;
|
||||||
static UniqueID32 kInvalidId;
|
static UniqueID32 kInvalidId;
|
||||||
AT_DECL_EXPLICIT_DNA_YAML
|
AT_DECL_EXPLICIT_DNA_YAML
|
||||||
bool isValid() const { return m_id != 0xffffffff && m_id != 0; }
|
bool isValid() const noexcept { return m_id != 0xffffffff && m_id != 0; }
|
||||||
void assign(uint32_t id) { m_id = id ? id : 0xffffffff; }
|
void assign(uint32_t id) noexcept { m_id = id ? id : 0xffffffff; }
|
||||||
|
|
||||||
UniqueID32& operator=(const hecl::ProjectPath& path) {
|
UniqueID32& operator=(const hecl::ProjectPath& path) noexcept {
|
||||||
assign(path.parsedHash32());
|
assign(path.parsedHash32());
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const UniqueID32& other) const { return m_id != other.m_id; }
|
bool operator!=(const UniqueID32& other) const noexcept { return m_id != other.m_id; }
|
||||||
bool operator==(const UniqueID32& other) const { return m_id == other.m_id; }
|
bool operator==(const UniqueID32& other) const noexcept { return m_id == other.m_id; }
|
||||||
bool operator<(const UniqueID32& other) const { return m_id < other.m_id; }
|
bool operator<(const UniqueID32& other) const noexcept { return m_id < other.m_id; }
|
||||||
uint32_t toUint32() const { return m_id; }
|
uint32_t toUint32() const noexcept { return m_id; }
|
||||||
uint64_t toUint64() const { return m_id; }
|
uint64_t toUint64() const noexcept { return m_id; }
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
void clear() { m_id = 0xffffffff; }
|
void clear() noexcept { m_id = 0xffffffff; }
|
||||||
|
|
||||||
UniqueID32() = default;
|
UniqueID32() noexcept = default;
|
||||||
UniqueID32(uint32_t idin) { assign(idin); }
|
UniqueID32(uint32_t idin) noexcept { assign(idin); }
|
||||||
UniqueID32(athena::io::IStreamReader& reader) { read(reader); }
|
UniqueID32(athena::io::IStreamReader& reader) { read(reader); }
|
||||||
UniqueID32(const hecl::ProjectPath& path) { *this = path; }
|
UniqueID32(const hecl::ProjectPath& path) noexcept { *this = path; }
|
||||||
UniqueID32(const char* hexStr) {
|
UniqueID32(const char* hexStr) noexcept {
|
||||||
char copy[9];
|
char copy[9];
|
||||||
strncpy(copy, hexStr, 8);
|
strncpy(copy, hexStr, 8);
|
||||||
copy[8] = '\0';
|
copy[8] = '\0';
|
||||||
assign(strtoul(copy, nullptr, 16));
|
assign(strtoul(copy, nullptr, 16));
|
||||||
}
|
}
|
||||||
UniqueID32(const wchar_t* hexStr) {
|
UniqueID32(const wchar_t* hexStr) noexcept{
|
||||||
wchar_t copy[9];
|
wchar_t copy[9];
|
||||||
wcsncpy(copy, hexStr, 8);
|
wcsncpy(copy, hexStr, 8);
|
||||||
copy[8] = L'\0';
|
copy[8] = L'\0';
|
||||||
assign(wcstoul(copy, nullptr, 16));
|
assign(wcstoul(copy, nullptr, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr size_t BinarySize() { return 4; }
|
static constexpr size_t BinarySize() noexcept { return 4; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** PAK 32-bit Unique ID - writes zero when invalid */
|
/** PAK 32-bit Unique ID - writes zero when invalid */
|
||||||
@ -169,39 +169,39 @@ class UniqueID64 : public BigDNA {
|
|||||||
public:
|
public:
|
||||||
using value_type = uint64_t;
|
using value_type = uint64_t;
|
||||||
AT_DECL_EXPLICIT_DNA_YAML
|
AT_DECL_EXPLICIT_DNA_YAML
|
||||||
bool isValid() const { return m_id != 0xffffffffffffffff && m_id != 0; }
|
bool isValid() const noexcept { return m_id != 0xffffffffffffffff && m_id != 0; }
|
||||||
void assign(uint64_t id) { m_id = id ? id : 0xffffffffffffffff; }
|
void assign(uint64_t id) noexcept { m_id = id ? id : 0xffffffffffffffff; }
|
||||||
|
|
||||||
UniqueID64& operator=(const hecl::ProjectPath& path) {
|
UniqueID64& operator=(const hecl::ProjectPath& path) noexcept {
|
||||||
assign(path.hash().val64());
|
assign(path.hash().val64());
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const UniqueID64& other) const { return m_id != other.m_id; }
|
bool operator!=(const UniqueID64& other) const noexcept { return m_id != other.m_id; }
|
||||||
bool operator==(const UniqueID64& other) const { return m_id == other.m_id; }
|
bool operator==(const UniqueID64& other) const noexcept { return m_id == other.m_id; }
|
||||||
bool operator<(const UniqueID64& other) const { return m_id < other.m_id; }
|
bool operator<(const UniqueID64& other) const noexcept { return m_id < other.m_id; }
|
||||||
uint64_t toUint64() const { return m_id; }
|
uint64_t toUint64() const noexcept { return m_id; }
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
void clear() { m_id = 0xffffffffffffffff; }
|
void clear() noexcept { m_id = 0xffffffffffffffff; }
|
||||||
|
|
||||||
UniqueID64() = default;
|
UniqueID64() noexcept = default;
|
||||||
UniqueID64(uint64_t idin) { assign(idin); }
|
UniqueID64(uint64_t idin) noexcept { assign(idin); }
|
||||||
UniqueID64(athena::io::IStreamReader& reader) { read(reader); }
|
UniqueID64(athena::io::IStreamReader& reader) { read(reader); }
|
||||||
UniqueID64(const hecl::ProjectPath& path) { *this = path; }
|
UniqueID64(const hecl::ProjectPath& path) noexcept { *this = path; }
|
||||||
UniqueID64(const char* hexStr) {
|
UniqueID64(const char* hexStr) noexcept {
|
||||||
char copy[17];
|
char copy[17];
|
||||||
std::strncpy(copy, hexStr, 16);
|
std::strncpy(copy, hexStr, 16);
|
||||||
copy[16] = '\0';
|
copy[16] = '\0';
|
||||||
assign(std::strtoull(copy, nullptr, 16));
|
assign(std::strtoull(copy, nullptr, 16));
|
||||||
}
|
}
|
||||||
UniqueID64(const wchar_t* hexStr) {
|
UniqueID64(const wchar_t* hexStr) noexcept {
|
||||||
wchar_t copy[17];
|
wchar_t copy[17];
|
||||||
std::wcsncpy(copy, hexStr, 16);
|
std::wcsncpy(copy, hexStr, 16);
|
||||||
copy[16] = L'\0';
|
copy[16] = L'\0';
|
||||||
assign(std::wcstoull(copy, nullptr, 16));
|
assign(std::wcstoull(copy, nullptr, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr size_t BinarySize() { return 8; }
|
static constexpr size_t BinarySize() noexcept { return 8; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** PAK 128-bit Unique ID */
|
/** PAK 128-bit Unique ID */
|
||||||
@ -220,26 +220,26 @@ private:
|
|||||||
public:
|
public:
|
||||||
using value_type = uint64_t;
|
using value_type = uint64_t;
|
||||||
AT_DECL_EXPLICIT_DNA_YAML
|
AT_DECL_EXPLICIT_DNA_YAML
|
||||||
UniqueID128() {
|
UniqueID128() noexcept {
|
||||||
m_id.id[0] = 0xffffffffffffffff;
|
m_id.id[0] = 0xffffffffffffffff;
|
||||||
m_id.id[1] = 0xffffffffffffffff;
|
m_id.id[1] = 0xffffffffffffffff;
|
||||||
}
|
}
|
||||||
UniqueID128(uint64_t idin) {
|
UniqueID128(uint64_t idin) noexcept {
|
||||||
m_id.id[0] = idin;
|
m_id.id[0] = idin;
|
||||||
m_id.id[1] = 0;
|
m_id.id[1] = 0;
|
||||||
}
|
}
|
||||||
bool isValid() const {
|
bool isValid() const noexcept {
|
||||||
return m_id.id[0] != 0xffffffffffffffff && m_id.id[0] != 0 && m_id.id[1] != 0xffffffffffffffff && m_id.id[1] != 0;
|
return m_id.id[0] != 0xffffffffffffffff && m_id.id[0] != 0 && m_id.id[1] != 0xffffffffffffffff && m_id.id[1] != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UniqueID128& operator=(const hecl::ProjectPath& path) {
|
UniqueID128& operator=(const hecl::ProjectPath& path) noexcept {
|
||||||
m_id.id[0] = path.hash().val64();
|
m_id.id[0] = path.hash().val64();
|
||||||
m_id.id[1] = 0;
|
m_id.id[1] = 0;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
UniqueID128(const hecl::ProjectPath& path) { *this = path; }
|
UniqueID128(const hecl::ProjectPath& path) noexcept { *this = path; }
|
||||||
|
|
||||||
bool operator!=(const UniqueID128& other) const {
|
bool operator!=(const UniqueID128& other) const noexcept {
|
||||||
#if __SSE__
|
#if __SSE__
|
||||||
__m128i vcmp = _mm_cmpeq_epi32(m_id.id128, other.m_id.id128);
|
__m128i vcmp = _mm_cmpeq_epi32(m_id.id128, other.m_id.id128);
|
||||||
int vmask = _mm_movemask_epi8(vcmp);
|
int vmask = _mm_movemask_epi8(vcmp);
|
||||||
@ -248,7 +248,7 @@ public:
|
|||||||
return (m_id.id[0] != other.m_id.id[0]) || (m_id.id[1] != other.m_id.id[1]);
|
return (m_id.id[0] != other.m_id.id[0]) || (m_id.id[1] != other.m_id.id[1]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
bool operator==(const UniqueID128& other) const {
|
bool operator==(const UniqueID128& other) const noexcept {
|
||||||
#if __SSE__
|
#if __SSE__
|
||||||
__m128i vcmp = _mm_cmpeq_epi32(m_id.id128, other.m_id.id128);
|
__m128i vcmp = _mm_cmpeq_epi32(m_id.id128, other.m_id.id128);
|
||||||
int vmask = _mm_movemask_epi8(vcmp);
|
int vmask = _mm_movemask_epi8(vcmp);
|
||||||
@ -257,19 +257,19 @@ public:
|
|||||||
return (m_id.id[0] == other.m_id.id[0]) && (m_id.id[1] == other.m_id.id[1]);
|
return (m_id.id[0] == other.m_id.id[0]) && (m_id.id[1] == other.m_id.id[1]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
bool operator<(const UniqueID128& other) const {
|
bool operator<(const UniqueID128& other) const noexcept {
|
||||||
return m_id.id[0] < other.m_id.id[0] || (m_id.id[0] == other.m_id.id[0] && m_id.id[1] < other.m_id.id[1]);
|
return m_id.id[0] < other.m_id.id[0] || (m_id.id[0] == other.m_id.id[0] && m_id.id[1] < other.m_id.id[1]);
|
||||||
}
|
}
|
||||||
void clear() {
|
void clear() noexcept {
|
||||||
m_id.id[0] = 0xffffffffffffffff;
|
m_id.id[0] = 0xffffffffffffffff;
|
||||||
m_id.id[1] = 0xffffffffffffffff;
|
m_id.id[1] = 0xffffffffffffffff;
|
||||||
}
|
}
|
||||||
uint64_t toUint64() const { return m_id.id[0]; }
|
uint64_t toUint64() const noexcept { return m_id.id[0]; }
|
||||||
uint64_t toHighUint64() const { return m_id.id[0]; }
|
uint64_t toHighUint64() const noexcept { return m_id.id[0]; }
|
||||||
uint64_t toLowUint64() const { return m_id.id[1]; }
|
uint64_t toLowUint64() const noexcept { return m_id.id[1]; }
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
|
|
||||||
static constexpr size_t BinarySize() { return 16; }
|
static constexpr size_t BinarySize() noexcept { return 16; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Casts ID type to its null-zero equivalent */
|
/** Casts ID type to its null-zero equivalent */
|
||||||
@ -377,22 +377,22 @@ inline hecl::ProjectPath GetPathBeginsWith(const hecl::ProjectPath& parentPath,
|
|||||||
namespace std {
|
namespace std {
|
||||||
template <>
|
template <>
|
||||||
struct hash<DataSpec::DNAFourCC> {
|
struct hash<DataSpec::DNAFourCC> {
|
||||||
size_t operator()(const DataSpec::DNAFourCC& fcc) const { return fcc.toUint32(); }
|
size_t operator()(const DataSpec::DNAFourCC& fcc) const noexcept{ return fcc.toUint32(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct hash<DataSpec::UniqueID32> {
|
struct hash<DataSpec::UniqueID32> {
|
||||||
size_t operator()(const DataSpec::UniqueID32& id) const { return id.toUint32(); }
|
size_t operator()(const DataSpec::UniqueID32& id) const noexcept{ return id.toUint32(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct hash<DataSpec::UniqueID64> {
|
struct hash<DataSpec::UniqueID64> {
|
||||||
size_t operator()(const DataSpec::UniqueID64& id) const { return id.toUint64(); }
|
size_t operator()(const DataSpec::UniqueID64& id) const noexcept{ return id.toUint64(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct hash<DataSpec::UniqueID128> {
|
struct hash<DataSpec::UniqueID128> {
|
||||||
size_t operator()(const DataSpec::UniqueID128& id) const { return id.toHighUint64() ^ id.toLowUint64(); }
|
size_t operator()(const DataSpec::UniqueID128& id) const noexcept { return id.toHighUint64() ^ id.toLowUint64(); }
|
||||||
};
|
};
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user