void ModuleManager::updateModules( ModuleState state )
{
	size_t numModules = _modules.size();

	std::vector<IModule*> sortedModules;
	sortedModules.reserve( numModules );

	for( size_t i = 0; i < numModules; ++i )
		sortedModules.push_back( _modules[i].get() );

	std::sort( sortedModules.begin(), sortedModules.end(), sortByIncreasingRank );

	for( size_t i = 0; i < numModules; ++i )
	{
		IModule* module = sortedModules[i];
		try
		{
			updateModule( module, state );
		}
		catch( std::exception& e )
		{
			module->abort();

			CORAL_LOG(WARNING) << "Module '" << module->getNamespace()->getFullName() <<
				"' aborted due to exception: " << e.what();
		}
	}
}