mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use small function to get check handler for content type. (#13988)
This reduces a long switch block with (multiple) breaks with the power of early return.pull/13989/head
parent
936d78fefc
commit
413087df9d
|
@ -56,7 +56,29 @@ static bool HasGRFConfig(const ContentInfo *ci, bool md5sum)
|
|||
* @param md5sum also match the MD5 checksum?
|
||||
* @return true iff it's known
|
||||
*/
|
||||
typedef bool (*HasProc)(const ContentInfo *ci, bool md5sum);
|
||||
using HasContentProc = bool(const ContentInfo *ci, bool md5sum);
|
||||
|
||||
/**
|
||||
* Get the has-content check function for the given content type.
|
||||
* @param type Content type to get check function for.
|
||||
* @return Check function pointer.
|
||||
*/
|
||||
static HasContentProc *GetHasContentProcforContentType(ContentType type)
|
||||
{
|
||||
switch (type) {
|
||||
case CONTENT_TYPE_NEWGRF: return HasGRFConfig;
|
||||
case CONTENT_TYPE_BASE_GRAPHICS: return BaseGraphics::HasSet;
|
||||
case CONTENT_TYPE_BASE_MUSIC: return BaseMusic::HasSet;
|
||||
case CONTENT_TYPE_BASE_SOUNDS: return BaseSounds::HasSet;
|
||||
case CONTENT_TYPE_AI: return AI::HasAI;
|
||||
case CONTENT_TYPE_AI_LIBRARY: return AI::HasAILibrary;
|
||||
case CONTENT_TYPE_GAME: return Game::HasGame;
|
||||
case CONTENT_TYPE_GAME_LIBRARY: return Game::HasGameLibrary;
|
||||
case CONTENT_TYPE_SCENARIO: return HasScenario;
|
||||
case CONTENT_TYPE_HEIGHTMAP: return HasScenario;
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet &p)
|
||||
{
|
||||
|
@ -91,50 +113,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet &p)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* Find the appropriate check function */
|
||||
HasProc proc = nullptr;
|
||||
switch (ci->type) {
|
||||
case CONTENT_TYPE_NEWGRF:
|
||||
proc = HasGRFConfig;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_BASE_GRAPHICS:
|
||||
proc = BaseGraphics::HasSet;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_BASE_MUSIC:
|
||||
proc = BaseMusic::HasSet;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_BASE_SOUNDS:
|
||||
proc = BaseSounds::HasSet;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_AI:
|
||||
proc = AI::HasAI; break;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_AI_LIBRARY:
|
||||
proc = AI::HasAILibrary; break;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_GAME:
|
||||
proc = Game::HasGame; break;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_GAME_LIBRARY:
|
||||
proc = Game::HasGameLibrary; break;
|
||||
break;
|
||||
|
||||
case CONTENT_TYPE_SCENARIO:
|
||||
case CONTENT_TYPE_HEIGHTMAP:
|
||||
proc = HasScenario;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
HasContentProc *proc = GetHasContentProcforContentType(ci->type);
|
||||
if (proc != nullptr) {
|
||||
if (proc(ci, true)) {
|
||||
ci->state = ContentInfo::ALREADY_HERE;
|
||||
|
|
Loading…
Reference in New Issue