Introduce static_container_cast

Casting all elements of a container, similar to qobject_container_cast.

Change-Id: Ib455fe8c7fa0d4acda7e29685c3100638a0152f8
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Eike Ziller
2018-05-29 10:59:27 +02:00
parent 7ad738d236
commit bb28b10add
5 changed files with 21 additions and 9 deletions

View File

@@ -626,6 +626,20 @@ Container<T> qobject_container_cast(const Container<Base> &container)
return result;
}
//////////////////
// static_container_cast
/////////////////
template <class T, template<typename> class Container, typename Base>
Container<T> static_container_cast(const Container<Base> &container)
{
Container<T> result;
reserve(result, container.size());
auto ins = inserter(result);
for (Base val : container)
ins = static_cast<T>(val);
return result;
}
//////////////////
// sort
/////////////////

View File

@@ -1032,9 +1032,7 @@ void AndroidConfigurations::updateAutomaticKitList()
&& tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID
&& !static_cast<const AndroidToolChain *>(tc)->isSecondaryToolChain();
});
const QList<AndroidToolChain *> toolchains = Utils::transform(tmp, [](ToolChain *tc) {
return static_cast<AndroidToolChain *>(tc);
});
const auto toolchains = Utils::static_container_cast<AndroidToolChain *>(tmp);
for (AndroidToolChain *tc : toolchains) {
if (tc->isSecondaryToolChain() || tc->language() != Core::Id(ProjectExplorer::Constants::CXX_LANGUAGE_ID))
continue;

View File

@@ -313,7 +313,7 @@ SdkPlatformList AndroidSdkManager::installedSdkPlatforms()
{
AndroidSdkPackageList list = m_d->filteredPackages(AndroidSdkPackage::Installed,
AndroidSdkPackage::SdkPlatformPackage);
return Utils::qobject_container_cast<SdkPlatform *>(list);
return Utils::static_container_cast<SdkPlatform *>(list);
}
const AndroidSdkPackageList &AndroidSdkManager::allSdkPackages()

View File

@@ -596,7 +596,7 @@ QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &exi
{
QList<ClangToolChain *> existingClangToolChains = clangToolChains(existingToolChains);
const QList<XcodePlatform> platforms = XcodeProbe::detectPlatforms().values();
QList<ClangToolChain *> toolChains;
QList<ToolChain *> toolChains;
toolChains.reserve(platforms.size());
foreach (const XcodePlatform &platform, platforms) {
for (const XcodePlatform::ToolchainTarget &target : platform.targets) {
@@ -614,7 +614,7 @@ QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &exi
createOrAdd(platformToolchains.second, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
}
}
return Utils::transform(toolChains, [](ClangToolChain *tc) -> ToolChain * { return tc; });
return toolChains;
}
QString DevelopmentTeam::identifier() const

View File

@@ -358,9 +358,9 @@ BuildTargetInfoList Target::applicationTargets() const
QList<ProjectConfiguration *> Target::projectConfigurations() const
{
QList<ProjectConfiguration *> result;
result.append(Utils::qobject_container_cast<ProjectConfiguration *>(buildConfigurations()));
result.append(Utils::qobject_container_cast<ProjectConfiguration *>(deployConfigurations()));
result.append(Utils::qobject_container_cast<ProjectConfiguration *>(runConfigurations()));
result.append(Utils::static_container_cast<ProjectConfiguration *>(buildConfigurations()));
result.append(Utils::static_container_cast<ProjectConfiguration *>(deployConfigurations()));
result.append(Utils::static_container_cast<ProjectConfiguration *>(runConfigurations()));
return result;
}