From 466d03ffecf10c0a9fa89a8101d30fbab5d357d9 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 5 Oct 2019 07:53:43 -0500 Subject: [PATCH] adds a moduleDependencySort qsort callback, and uses it in the findModule method to massage the return vector by depends order --- Engine/source/module/moduleManager.cpp | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Engine/source/module/moduleManager.cpp b/Engine/source/module/moduleManager.cpp index d8620c1f0..22c877594 100644 --- a/Engine/source/module/moduleManager.cpp +++ b/Engine/source/module/moduleManager.cpp @@ -38,9 +38,16 @@ #include "console/consoleTypes.h" #endif +#ifndef _MODULE_DEFINITION_H +#include "module/moduleDefinition.h" +#endif + +#ifndef _STRINGFUNCTIONS_H_ +#include "core/strings/stringFunctions.h" +#endif + // Script bindings. #include "moduleManager_ScriptBinding.h" - //----------------------------------------------------------------------------- IMPLEMENT_CONOBJECT( ModuleManager ); @@ -65,6 +72,25 @@ S32 QSORT_CALLBACK moduleDefinitionVersionIdSort( const void* a, const void* b ) return versionId1 > versionId2 ? -1 : versionId1 < versionId2 ? 1 : 0; } +S32 QSORT_CALLBACK moduleDependencySort(const void* a, const void* b) +{ + // Fetch module definitions. + ModuleDefinition* pDefinition1 = *(ModuleDefinition * *)a; + ModuleDefinition* pDefinition2 = *(ModuleDefinition * *)b; + + // Fetch version Ids. + ModuleDefinition::typeModuleDependencyVector moduleDependencies = pDefinition1->getDependencies(); + bool foundDependant = false; + for (ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr != moduleDependencies.end(); ++dependencyItr) + { + if (dStrcmp(dependencyItr->mModuleId, pDefinition2->getModuleId()) + && (dependencyItr->mVersionId == pDefinition2->getVersionId())) + foundDependant = true; + } + + return foundDependant ? 1 : -1; +} + //----------------------------------------------------------------------------- ModuleManager::ModuleManager() : @@ -1087,6 +1113,7 @@ void ModuleManager::findModules( const bool loadedOnly, typeConstModuleDefinitio moduleDefinitions.push_back( pModuleDefinition ); } } + dQsort(moduleDefinitions.address(), moduleDefinitions.size(), sizeof(ModuleDefinition*), moduleDependencySort); } //-----------------------------------------------------------------------------