mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-01-17 22:55:38 +00:00
Move MameNameMap out of the source and into mamenames.xml
This commit is contained in:
parent
4d732a448e
commit
3f3e1ceb16
|
@ -61,7 +61,6 @@ set(ES_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNameMap.cpp
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "FileFilterIndex.h"
|
#include "FileFilterIndex.h"
|
||||||
#include "FileSorts.h"
|
#include "FileSorts.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
#include "MameNames.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "SystemData.h"
|
#include "SystemData.h"
|
||||||
#include "VolumeControl.h"
|
#include "VolumeControl.h"
|
||||||
|
@ -38,7 +39,7 @@ std::string FileData::getDisplayName() const
|
||||||
{
|
{
|
||||||
std::string stem = Utils::FileSystem::getStem(mPath);
|
std::string stem = Utils::FileSystem::getStem(mPath);
|
||||||
if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO))
|
if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO))
|
||||||
stem = PlatformIds::mameTitleSearch(stem.c_str());
|
stem = MameNames::getInstance()->getRealName(stem);
|
||||||
|
|
||||||
return stem;
|
return stem;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -94,53 +94,4 @@ namespace PlatformIds
|
||||||
{
|
{
|
||||||
return PlatformNames[id];
|
return PlatformNames[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
int getMameTitleCount()
|
|
||||||
{
|
|
||||||
const char** mameNames = mameNameToRealName;
|
|
||||||
int count = 0;
|
|
||||||
while (*mameNames != NULL)
|
|
||||||
{
|
|
||||||
mameNames += 2;
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char* mameTitleSearch(const char* from)
|
|
||||||
{
|
|
||||||
// The start and end index range from [0, number of roms]
|
|
||||||
int iStart = 0;
|
|
||||||
static int mameCount = getMameTitleCount();
|
|
||||||
int iEnd = mameCount;
|
|
||||||
|
|
||||||
while (iStart < iEnd)
|
|
||||||
{
|
|
||||||
// The middle entry is halfway between the start and end index
|
|
||||||
const int iMiddle = (iStart + iEnd) / 2;
|
|
||||||
|
|
||||||
// mameNameToRealName contains 2 sequential entries for every entry, so the indexes look like this:
|
|
||||||
// 0: key, value,
|
|
||||||
// 2: key, value,
|
|
||||||
// 4: key, value
|
|
||||||
// This means that there are twice as many indexes as there are numbers of ROMs. So to get the
|
|
||||||
// iMiddle'th entry, we need to multiply by 2 because iMiddle goes from [0, number of roms].
|
|
||||||
const int iKey = iMiddle * 2;
|
|
||||||
const int comp = strcmp(mameNameToRealName[iKey], from);
|
|
||||||
if (comp < 0)
|
|
||||||
{
|
|
||||||
// Remember, iMiddle ranges from [0, number of roms] so we only increment by 1
|
|
||||||
iStart = iMiddle + 1;
|
|
||||||
}
|
|
||||||
else if (comp > 0)
|
|
||||||
{
|
|
||||||
iEnd = iMiddle;
|
|
||||||
}
|
|
||||||
// The Key was found, now return the Value
|
|
||||||
else return mameNameToRealName[iKey + 1];
|
|
||||||
}
|
|
||||||
return from;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,13 +77,6 @@ namespace PlatformIds
|
||||||
|
|
||||||
PlatformId getPlatformId(const char* str);
|
PlatformId getPlatformId(const char* str);
|
||||||
const char* getPlatformName(PlatformId id);
|
const char* getPlatformName(PlatformId id);
|
||||||
|
|
||||||
// Get the number of Mame titles in the mameNameToRealName array
|
|
||||||
// Should only run this once and store in a static or cached variable
|
|
||||||
int getMameTitleCount();
|
|
||||||
|
|
||||||
// Perform a binary search for a game title given a rom name
|
|
||||||
const char* mameTitleSearch(const char* from);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ES_APP_PLATFORM_ID_H
|
#endif // ES_APP_PLATFORM_ID_H
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "EmulationStation.h"
|
#include "EmulationStation.h"
|
||||||
#include "InputManager.h"
|
#include "InputManager.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
#include "MameNames.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "PowerSaver.h"
|
#include "PowerSaver.h"
|
||||||
#include "ScraperCmdLine.h"
|
#include "ScraperCmdLine.h"
|
||||||
|
@ -282,6 +283,7 @@ int main(int argc, char* argv[])
|
||||||
PowerSaver::init();
|
PowerSaver::init();
|
||||||
ViewController::init(&window);
|
ViewController::init(&window);
|
||||||
CollectionSystemManager::init(&window);
|
CollectionSystemManager::init(&window);
|
||||||
|
MameNames::init();
|
||||||
window.pushGui(ViewController::get());
|
window.pushGui(ViewController::get());
|
||||||
|
|
||||||
if(!scrape_cmdline)
|
if(!scrape_cmdline)
|
||||||
|
@ -409,6 +411,7 @@ int main(int argc, char* argv[])
|
||||||
delete window.peekGui();
|
delete window.peekGui();
|
||||||
window.deinit();
|
window.deinit();
|
||||||
|
|
||||||
|
MameNames::deinit();
|
||||||
CollectionSystemManager::deinit();
|
CollectionSystemManager::deinit();
|
||||||
SystemData::deleteSystems();
|
SystemData::deleteSystems();
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ set(CORE_HEADERS
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h
|
||||||
|
@ -84,6 +85,7 @@ set(CORE_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp
|
||||||
|
|
85
es-core/src/MameNames.cpp
Normal file
85
es-core/src/MameNames.cpp
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#include "MameNames.h"
|
||||||
|
|
||||||
|
#include "resources/ResourceManager.h"
|
||||||
|
#include "utils/FileSystemUtil.h"
|
||||||
|
#include "Log.h"
|
||||||
|
#include <pugixml/src/pugixml.hpp>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
MameNames* MameNames::sInstance = nullptr;
|
||||||
|
|
||||||
|
void MameNames::init()
|
||||||
|
{
|
||||||
|
if(!sInstance)
|
||||||
|
sInstance = new MameNames();
|
||||||
|
|
||||||
|
} // init
|
||||||
|
|
||||||
|
void MameNames::deinit()
|
||||||
|
{
|
||||||
|
if(sInstance)
|
||||||
|
{
|
||||||
|
delete sInstance;
|
||||||
|
sInstance = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // deinit
|
||||||
|
|
||||||
|
MameNames* MameNames::getInstance()
|
||||||
|
{
|
||||||
|
if(!sInstance)
|
||||||
|
sInstance = new MameNames();
|
||||||
|
|
||||||
|
return sInstance;
|
||||||
|
|
||||||
|
} // getInstance
|
||||||
|
|
||||||
|
MameNames::MameNames()
|
||||||
|
{
|
||||||
|
std::string xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamenames.xml");
|
||||||
|
|
||||||
|
if(!Utils::FileSystem::exists(xmlpath))
|
||||||
|
return;
|
||||||
|
|
||||||
|
LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"...";
|
||||||
|
|
||||||
|
pugi::xml_document doc;
|
||||||
|
pugi::xml_parse_result result = doc.load_file(xmlpath.c_str());
|
||||||
|
|
||||||
|
if(!result)
|
||||||
|
{
|
||||||
|
LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(pugi::xml_node gameNode = doc.child("game"); gameNode; gameNode = gameNode.next_sibling("game"))
|
||||||
|
{
|
||||||
|
NamePair namePair = { gameNode.child("mamename").text().get(), gameNode.child("realname").text().get() };
|
||||||
|
names.push_back(namePair);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // MameNames
|
||||||
|
|
||||||
|
MameNames::~MameNames()
|
||||||
|
{
|
||||||
|
|
||||||
|
} // ~MameNames
|
||||||
|
|
||||||
|
std::string MameNames::getRealName(const std::string& _mameName)
|
||||||
|
{
|
||||||
|
size_t start = 0;
|
||||||
|
size_t end = names.size();
|
||||||
|
|
||||||
|
while(start < end)
|
||||||
|
{
|
||||||
|
const size_t index = (start + end) / 2;
|
||||||
|
const int compare = strcmp(names[index].mameName.c_str(), _mameName.c_str());
|
||||||
|
|
||||||
|
if(compare < 0) start = index + 1;
|
||||||
|
else if( compare > 0) end = index;
|
||||||
|
else return names[index].realName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _mameName;
|
||||||
|
|
||||||
|
} // getRealName
|
38
es-core/src/MameNames.h
Normal file
38
es-core/src/MameNames.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#pragma once
|
||||||
|
#ifndef ES_CORE_MAMENAMES_H
|
||||||
|
#define ES_CORE_MAMENAMES_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace CEC { class ICECAdapter; }
|
||||||
|
|
||||||
|
class MameNames
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
static void init ();
|
||||||
|
static void deinit ();
|
||||||
|
static MameNames* getInstance();
|
||||||
|
std::string getRealName(const std::string& _mameName);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct NamePair
|
||||||
|
{
|
||||||
|
std::string mameName;
|
||||||
|
std::string realName;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::vector<NamePair> namePairVector;
|
||||||
|
|
||||||
|
MameNames();
|
||||||
|
~MameNames();
|
||||||
|
|
||||||
|
static MameNames* sInstance;
|
||||||
|
|
||||||
|
namePairVector names;
|
||||||
|
|
||||||
|
}; // MameNames
|
||||||
|
|
||||||
|
#endif // ES_CORE_MAMENAMES_H
|
121778
resources/mamenames.xml
Normal file
121778
resources/mamenames.xml
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue