Exemplo n.º 1
0
void Data::getAllDependenciesToInstall(Config *config,
		std::vector<Config*>* installedConfigs, std::vector<Config*> *dependencies)
{
	for (std::vector<std::string>::const_iterator configDependency = config->dependencies_.begin();
			configDependency != config->dependencies_.end(); configDependency++)
	{
		bool found = false;

		for (std::vector<Config*>::const_iterator installedConfig = installedConfigs->begin();
				installedConfig != installedConfigs->end(); installedConfig++)
		{
			if ((*configDependency) == (*installedConfig)->name_)
			{
				found = true;
				break;
			}
		}

		if (found)
			continue;

		// Check if already in vector
		for (std::vector<Config*>::const_iterator dependency = dependencies->begin();
				dependency != dependencies->end(); dependency++)
		{
			if ((*dependency)->name_ == (*configDependency))
			{
				found = true;
				break;
			}
		}

		if (found)
		{
			continue;
		}
		else
		{
			// Add to vector and check for further subdepends...
			Config *dependconfig = getDatabaseConfig((*configDependency), config->type_);
			if (dependconfig == nullptr)
			{
				continue;
			}
			else
			{
				dependencies->push_back(dependconfig);
				getAllDependenciesToInstall(dependconfig, installedConfigs, dependencies);
			}
		}
	}
}
Exemplo n.º 2
0
mhwd::Transaction mhwd::createTransaction(mhwd::Data *data, mhwd::Config* config, mhwd::Transaction::TYPE type, bool allowReinstallation) {
    struct mhwd::Transaction transaction;
    transaction.type = type;
    transaction.allowReinstallation = allowReinstallation;
    transaction.config = config;

    // Fill transaction vectors
    transaction.requiredByConfigs = getAllLocalRequirements(data, config);
    transaction.dependencyConfigs = getAllDependenciesToInstall(data, config);
    transaction.conflictedConfigs = getAllLocalConflicts(data, config);

    return transaction;
}
Exemplo n.º 3
0
std::vector<Config*> Data::getAllDependenciesToInstall(Config *config)
{
	std::vector<Config*> depends;
	std::vector<Config*> installedConfigs;

	// Get the right configs
	if (config->type_ == MHWD::DEVICETYPE::USB)
	{
		installedConfigs = installedUSBConfigs;
	}
	else
	{
		installedConfigs = installedPCIConfigs;
	}

	// Get all depends
	getAllDependenciesToInstall(config, &installedConfigs, &depends);

	return depends;
}
Exemplo n.º 4
0
std::vector<mhwd::Config*> mhwd::getAllLocalConflicts(mhwd::Data *data, mhwd::Config *config) {
    std::vector<mhwd::Config*> conflicts;
    std::vector<mhwd::Config*> depends = getAllDependenciesToInstall(data, config);
    std::vector<mhwd::Config*>* installedConfigs;

    // Get the right configs
    if (config->type == mhwd::TYPE_USB)
        installedConfigs = &data->installedUSBConfigs;
    else
        installedConfigs = &data->installedPCIConfigs;


    depends.push_back(config);

    for (std::vector<mhwd::Config*>::const_iterator depend = depends.begin(); depend != depends.end(); depend++) {
        for (std::vector<std::string>::const_iterator conflict = (*depend)->conflicts.begin(); conflict != (*depend)->conflicts.end(); conflict++) {
            for (std::vector<mhwd::Config*>::const_iterator iterator = installedConfigs->begin(); iterator != installedConfigs->end(); iterator++) {
                if ((*conflict) != (*iterator)->name)
                    continue;

                // Check if already in vector
                bool found = false;
                for (std::vector<mhwd::Config*>::const_iterator it = conflicts.begin(); it != conflicts.end(); it++) {
                    if ((*it)->name == (*conflict)) {
                        found = true;
                        break;
                    }
                }

                if (found)
                    continue;

                // Add to vector
                conflicts.push_back((*iterator));
                break;
            }
        }
    }

    return conflicts;
}
Exemplo n.º 5
0
std::vector<Config*> Data::getAllLocalConflicts(Config *config)
{
	std::vector<Config*> conflicts;
	std::vector<Config*> dependencies = getAllDependenciesToInstall(config);
	std::vector<Config*> installedConfigs;

	// Get the right configs
	if (config->type_ == MHWD::DEVICETYPE::USB)
	{
		installedConfigs = installedUSBConfigs;
	}
	else
	{
		installedConfigs = installedPCIConfigs;
	}

	dependencies.push_back(config);

	for (std::vector<Config*>::const_iterator dependency = dependencies.begin();
			dependency != dependencies.end(); dependency++)
	{
		for (std::vector<std::string>::const_iterator dependencyConflict =
				(*dependency)->conflicts_.begin();
				dependencyConflict != (*dependency)->conflicts_.end(); dependencyConflict++)
		{
			for (std::vector<Config*>::const_iterator installedConfig = installedConfigs.begin();
					installedConfig != installedConfigs.end(); installedConfig++)
			{
				if ((*dependencyConflict) != (*installedConfig)->name_)
				{
					continue;
				}
				else
				{
					// Check if already in vector
					bool found = false;
					for (std::vector<Config*>::const_iterator conflict = conflicts.begin();
							conflict != conflicts.end(); conflict++)
					{
						if ((*conflict)->name_ == (*dependencyConflict))
						{
							found = true;
							break;
						}
					}

					if (found)
					{
						continue;
					}
					else
					{
						conflicts.push_back((*installedConfig));
						break;
					}
				}
			}
		}
	}

	return conflicts;
}