summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2017-03-28 15:41:45 -0400
committerLioncash <mathew1800@gmail.com>2017-03-28 15:43:21 -0400
commitc0171975ea8402e7ccf5f7eebcb1f59de0d712ea (patch)
treebb40023d5d38509918a8e7ede7b119d28aa6627f /Source
parentfee2577e2515881f8c2dc38189a28670eba7027c (diff)
MEGASignatureDB: Move implementation details into the cpp file
These functions aren't dependent on any database state and can be hidden.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.cpp128
-rw-r--r--Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.h7
2 files changed, 66 insertions, 69 deletions
diff --git a/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.cpp b/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.cpp
index bdc3e7349a..a4a1690556 100644
--- a/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.cpp
+++ b/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.cpp
@@ -8,6 +8,7 @@
#include <cstdlib>
#include <fstream>
#include <limits>
+#include <sstream>
#include "Common/FileUtil.h"
#include "Common/Logging/Log.h"
@@ -16,66 +17,11 @@
#include "Core/PowerPC/PPCSymbolDB.h"
#include "Core/PowerPC/PowerPC.h"
-static constexpr size_t INSTRUCTION_HEXSTRING_LENGTH = 8;
-
-MEGASignatureDB::MEGASignatureDB() = default;
-MEGASignatureDB::~MEGASignatureDB() = default;
-
-bool MEGASignatureDB::Load(const std::string& file_path)
+namespace
{
- std::string line;
- std::ifstream ifs;
- OpenFStream(ifs, file_path, std::ios_base::in);
-
- if (!ifs)
- return false;
- for (size_t i = 1; std::getline(ifs, line); ++i)
- {
- std::istringstream iss(line);
- MEGASignature sig;
+constexpr size_t INSTRUCTION_HEXSTRING_LENGTH = 8;
- if (GetCode(&sig, &iss) && GetName(&sig, &iss) && GetRefs(&sig, &iss))
- {
- m_signatures.push_back(sig);
- }
- else
- {
- WARN_LOG(OSHLE, "MEGA database failed to parse line %zu", i);
- }
- }
- return true;
-}
-
-void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
-{
- for (auto& it : symbol_db->AccessSymbols())
- {
- u32 hash = it.first;
- auto& symbol = it.second;
- for (const auto& sig : m_signatures)
- {
- if (Compare(symbol.address, symbol.size, sig))
- {
- symbol.name = sig.name;
- INFO_LOG(OSHLE, "Found %s at %08x (size: %08x)!", sig.name.c_str(), symbol.address,
- symbol.size);
- break;
- }
- }
- }
- symbol_db->Index();
-}
-
-void MEGASignatureDB::List() const
-{
- for (const auto& entry : m_signatures)
- {
- DEBUG_LOG(OSHLE, "%s : %zu bytes", entry.name.c_str(), entry.code.size() * sizeof(u32));
- }
- INFO_LOG(OSHLE, "%zu functions known in current MEGA database.", m_signatures.size());
-}
-
-bool MEGASignatureDB::GetCode(MEGASignature* sig, std::istringstream* iss) const
+bool GetCode(MEGASignature* sig, std::istringstream* iss)
{
std::string code;
if ((*iss >> code) && (code.length() % INSTRUCTION_HEXSTRING_LENGTH) == 0)
@@ -99,7 +45,7 @@ bool MEGASignatureDB::GetCode(MEGASignature* sig, std::istringstream* iss) const
return false;
}
-bool MEGASignatureDB::GetFunctionName(std::istringstream* iss, std::string* name) const
+bool GetFunctionName(std::istringstream* iss, std::string* name)
{
std::string buffer;
@@ -117,13 +63,13 @@ bool MEGASignatureDB::GetFunctionName(std::istringstream* iss, std::string* name
return true;
}
-bool MEGASignatureDB::GetName(MEGASignature* sig, std::istringstream* iss) const
+bool GetName(MEGASignature* sig, std::istringstream* iss)
{
std::string unknown;
return (*iss >> unknown) && GetFunctionName(iss, &sig->name);
}
-bool MEGASignatureDB::GetRefs(MEGASignature* sig, std::istringstream* iss) const
+bool GetRefs(MEGASignature* sig, std::istringstream* iss)
{
std::string num, ref;
u32 ref_count = 1;
@@ -154,7 +100,7 @@ bool MEGASignatureDB::GetRefs(MEGASignature* sig, std::istringstream* iss) const
return true;
}
-bool MEGASignatureDB::Compare(u32 address, u32 size, const MEGASignature& sig) const
+bool Compare(u32 address, u32 size, const MEGASignature& sig)
{
if (size != sig.code.size() * sizeof(u32))
return false;
@@ -167,3 +113,61 @@ bool MEGASignatureDB::Compare(u32 address, u32 size, const MEGASignature& sig) c
}
return true;
}
+} // Anonymous namespace
+
+MEGASignatureDB::MEGASignatureDB() = default;
+MEGASignatureDB::~MEGASignatureDB() = default;
+
+bool MEGASignatureDB::Load(const std::string& file_path)
+{
+ std::string line;
+ std::ifstream ifs;
+ OpenFStream(ifs, file_path, std::ios_base::in);
+
+ if (!ifs)
+ return false;
+ for (size_t i = 1; std::getline(ifs, line); ++i)
+ {
+ std::istringstream iss(line);
+ MEGASignature sig;
+
+ if (GetCode(&sig, &iss) && GetName(&sig, &iss) && GetRefs(&sig, &iss))
+ {
+ m_signatures.push_back(sig);
+ }
+ else
+ {
+ WARN_LOG(OSHLE, "MEGA database failed to parse line %zu", i);
+ }
+ }
+ return true;
+}
+
+void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
+{
+ for (auto& it : symbol_db->AccessSymbols())
+ {
+ u32 hash = it.first;
+ auto& symbol = it.second;
+ for (const auto& sig : m_signatures)
+ {
+ if (Compare(symbol.address, symbol.size, sig))
+ {
+ symbol.name = sig.name;
+ INFO_LOG(OSHLE, "Found %s at %08x (size: %08x)!", sig.name.c_str(), symbol.address,
+ symbol.size);
+ break;
+ }
+ }
+ }
+ symbol_db->Index();
+}
+
+void MEGASignatureDB::List() const
+{
+ for (const auto& entry : m_signatures)
+ {
+ DEBUG_LOG(OSHLE, "%s : %zu bytes", entry.name.c_str(), entry.code.size() * sizeof(u32));
+ }
+ INFO_LOG(OSHLE, "%zu functions known in current MEGA database.", m_signatures.size());
+}
diff --git a/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.h b/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.h
index 05d7d8e0ff..837b24d228 100644
--- a/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.h
+++ b/Source/Core/Core/PowerPC/SignatureDB/MEGASignatureDB.h
@@ -4,7 +4,6 @@
#pragma once
-#include <sstream>
#include <string>
#include <vector>
@@ -47,11 +46,5 @@ public:
void List() const;
private:
- bool GetCode(MEGASignature* sig, std::istringstream* iss) const;
- bool GetFunctionName(std::istringstream* iss, std::string* name) const;
- bool GetName(MEGASignature* sig, std::istringstream* iss) const;
- bool GetRefs(MEGASignature* sig, std::istringstream* iss) const;
- bool Compare(u32 address, u32 size, const MEGASignature& sig) const;
-
std::vector<MEGASignature> m_signatures;
};