GeckoCode: Provide operator== and operator!= overloads
Same thing but allows both GeckoCode and Code to be utilized directly without predicates for equality/inequality in stardard algorithms The size check for std::vectors is unnecessary, as this is built into std::vector's operator==
This commit is contained in:
parent
fba6801851
commit
e8cd5a3979
|
@ -5,6 +5,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/ChunkFile.h"
|
#include "Common/ChunkFile.h"
|
||||||
|
@ -20,6 +21,26 @@ namespace Gecko
|
||||||
{
|
{
|
||||||
static constexpr u32 CODE_SIZE = 8;
|
static constexpr u32 CODE_SIZE = 8;
|
||||||
|
|
||||||
|
bool operator==(const GeckoCode& lhs, const GeckoCode& rhs)
|
||||||
|
{
|
||||||
|
return lhs.codes == rhs.codes;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const GeckoCode& lhs, const GeckoCode& rhs)
|
||||||
|
{
|
||||||
|
return !operator==(lhs, rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const GeckoCode::Code& lhs, const GeckoCode::Code& rhs)
|
||||||
|
{
|
||||||
|
return std::tie(lhs.address, lhs.data) == std::tie(rhs.address, rhs.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const GeckoCode::Code& lhs, const GeckoCode::Code& rhs)
|
||||||
|
{
|
||||||
|
return !operator==(lhs, rhs);
|
||||||
|
}
|
||||||
|
|
||||||
// return true if a code exists
|
// return true if a code exists
|
||||||
bool GeckoCode::Exist(u32 address, u32 data) const
|
bool GeckoCode::Exist(u32 address, u32 data) const
|
||||||
{
|
{
|
||||||
|
@ -28,16 +49,6 @@ bool GeckoCode::Exist(u32 address, u32 data) const
|
||||||
}) != codes.end();
|
}) != codes.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// return true if the code is identical
|
|
||||||
bool GeckoCode::Compare(const GeckoCode& compare) const
|
|
||||||
{
|
|
||||||
return codes.size() == compare.codes.size() &&
|
|
||||||
std::equal(codes.begin(), codes.end(), compare.codes.begin(),
|
|
||||||
[](const Code& a, const Code& b) {
|
|
||||||
return a.address == b.address && a.data == b.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class Installation
|
enum class Installation
|
||||||
{
|
{
|
||||||
Uninstalled,
|
Uninstalled,
|
||||||
|
|
|
@ -31,10 +31,15 @@ public:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool user_defined;
|
bool user_defined;
|
||||||
|
|
||||||
bool Compare(const GeckoCode& compare) const;
|
|
||||||
bool Exist(u32 address, u32 data) const;
|
bool Exist(u32 address, u32 data) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool operator==(const GeckoCode& lhs, const GeckoCode& rhs);
|
||||||
|
bool operator!=(const GeckoCode& lhs, const GeckoCode& rhs);
|
||||||
|
|
||||||
|
bool operator==(const GeckoCode::Code& lhs, const GeckoCode::Code& rhs);
|
||||||
|
bool operator!=(const GeckoCode::Code& lhs, const GeckoCode::Code& rhs);
|
||||||
|
|
||||||
// Installation address for codehandler.bin in the Game's RAM
|
// Installation address for codehandler.bin in the Game's RAM
|
||||||
constexpr u32 INSTALLER_BASE_ADDRESS = 0x80001800;
|
constexpr u32 INSTALLER_BASE_ADDRESS = 0x80001800;
|
||||||
constexpr u32 INSTALLER_END_ADDRESS = 0x80003000;
|
constexpr u32 INSTALLER_END_ADDRESS = 0x80003000;
|
||||||
|
|
|
@ -275,8 +275,8 @@ void CodeConfigPanel::DownloadCodes(wxCommandEvent&)
|
||||||
for (const GeckoCode& code : gcodes)
|
for (const GeckoCode& code : gcodes)
|
||||||
{
|
{
|
||||||
// only add codes which do not already exist
|
// only add codes which do not already exist
|
||||||
std::vector<GeckoCode>::const_iterator existing_gcodes_iter = m_gcodes.begin(),
|
auto existing_gcodes_iter = m_gcodes.begin();
|
||||||
existing_gcodes_end = m_gcodes.end();
|
auto existing_gcodes_end = m_gcodes.end();
|
||||||
for (;; ++existing_gcodes_iter)
|
for (;; ++existing_gcodes_iter)
|
||||||
{
|
{
|
||||||
if (existing_gcodes_end == existing_gcodes_iter)
|
if (existing_gcodes_end == existing_gcodes_iter)
|
||||||
|
@ -287,7 +287,7 @@ void CodeConfigPanel::DownloadCodes(wxCommandEvent&)
|
||||||
}
|
}
|
||||||
|
|
||||||
// code exists
|
// code exists
|
||||||
if (existing_gcodes_iter->Compare(code))
|
if (*existing_gcodes_iter == code)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue