Пример #1
0
std::shared_ptr<OsmAnd::RoutePlannerContext::RouteCalculationSegment> OsmAnd::RoutePlannerContext::RoutingSubsectionContext::loadRouteCalculationSegment(
    uint32_t x31, uint32_t y31,
    QMap<uint64_t, std::shared_ptr<const Model::Road> >& processed,
    const std::shared_ptr<RouteCalculationSegment>& original_)
{
    uint64_t id = (static_cast<uint64_t>(x31) << 31) | y31;
    auto itSegment = _roadSegments.constFind(id);
    if(itSegment == _roadSegments.cend())
        return original_;
    this->_access++;

    auto original = original_;
    auto segment = *itSegment;
    while(segment)
    {
        auto road = segment->road;
        auto roadPointId = RoutePlanner::encodeRoutePointId(road, segment->pointIndex);
        auto itOtherRoad = processed.constFind(roadPointId);
        if(itOtherRoad == processed.cend() || (*itOtherRoad)->points.size() < road->points.size())
        {
            processed.insert(roadPointId, road);

            std::shared_ptr<RouteCalculationSegment> newSegment(new RouteCalculationSegment(road, segment->pointIndex));
            newSegment->_next = original;
            original = newSegment;
        }

        segment = segment->next;
    }
    
    return original;
}
Пример #2
0
void FileMover::moveFilesWhenRollback(const QMap<QString,Element> &tomove,const QMap<QString,Element> & todelete, QString prjNum)
{
    QDir dir;
    for(auto it=todelete.cend();it!=todelete.cbegin();){
        it--;
        qDebug()<<"delete from "+_originPath+it.value().getPath();
        if(!it.value().isFolder())
            QFile::remove(_originPath+it.value().getPath());
        else dir.rmdir(_originPath+it.value().getPath());
    }
    /*for(auto elem:todelete.cend()){
        qDebug()<<"delete from "+_originPath+elem.getPath();
        if(!elem.isFolder())
        QFile::remove(_originPath+elem.getPath());
        else dir.rmdir(_originPath+elem.getPath());
    }*/
    for(auto elem:tomove){
        QString from=_storagePath+"Project "+prjNum+ "/Version " + QString::number(elem.getVersionId()) +
                +"/changed" + elem.getPath();
        QString to=_originPath+elem.getPath();
        qDebug()<<"copy from "<<from<<" to "<<to;
        if(!elem.isFolder())
            FileMover::copyFile(from,to);
        else dir.mkdir(_originPath+elem.getPath());
    }
}
Пример #3
0
void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) {
    const QVector<MTPMessage> *v = 0;
    switch (msgs.type()) {
    case mtpc_messages_messages:
        App::feedUsers(msgs.c_messages_messages().vusers);
        App::feedChats(msgs.c_messages_messages().vchats);
        v = &msgs.c_messages_messages().vmessages.c_vector().v;
        break;

    case mtpc_messages_messagesSlice:
        App::feedUsers(msgs.c_messages_messagesSlice().vusers);
        App::feedChats(msgs.c_messages_messagesSlice().vchats);
        v = &msgs.c_messages_messagesSlice().vmessages.c_vector().v;
        break;
    }

    QMap<int32, int32> msgsIds; // copied from feedMsgs
    for (int32 i = 0, l = v->size(); i < l; ++i) {
        const MTPMessage &msg(v->at(i));
        switch (msg.type()) {
        case mtpc_message:
            msgsIds.insert(msg.c_message().vid.v, i);
            break;
        case mtpc_messageEmpty:
            msgsIds.insert(msg.c_messageEmpty().vid.v, i);
            break;
        case mtpc_messageService:
            msgsIds.insert(msg.c_messageService().vid.v, i);
            break;
        }
    }

    MainWidget *m = App::main();
    for (QMap<int32, int32>::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) {
        HistoryItem *item = App::histories().addToBack(v->at(*i), -1);
        if (item) {
            item->initDimensions();
            if (m) m->itemResized(item);
        }
    }

    const WebPageItems &items(App::webPageItems());
    for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend();) {
        if (i.value() == req) {
            if (i.key()->pendingTill > 0) {
                i.key()->pendingTill = -1;
                WebPageItems::const_iterator j = items.constFind(i.key());
                if (j != items.cend()) {
                    for (HistoryItemsMap::const_iterator k = j.value().cbegin(), e = j.value().cend(); k != e; ++k) {
                        k.key()->initDimensions();
                        if (m) m->itemResized(k.key());
                    }
                }
            }
            i = _webPagesPending.erase(i);
        } else {
            ++i;
        }
    }
}
void ExperimentConditionsDialog::fill_table_from_qmap(QMap<Element, double> const & target) {
    for(auto it = target.cbegin(), end = target.cend(); it != end; ++it) {
        auto row_count = ui->target_composition_table->rowCount();
        ui->target_composition_table->insertRow(row_count);
        set_component(row_count, QPair<Element, double>{{it.key().charge, it.key().mass}, it.value() * 100});
    }
}
void SelectableTextEditorWidget::setSelections(const QMap<int, QList<DiffSelection> > &selections)
{
    m_diffSelections.clear();
    for (auto it = selections.cbegin(), end = selections.cend(); it != end; ++it) {
        const QList<DiffSelection> diffSelections = it.value();
        QList<DiffSelection> workingList;
        for (const DiffSelection &diffSelection : diffSelections) {
            if (diffSelection.start == -1 && diffSelection.end == 0)
                continue;

            if (diffSelection.start == diffSelection.end && diffSelection.start >= 0)
                continue;

            int j = 0;
            while (j < workingList.count()) {
                const DiffSelection existingSelection = workingList.takeAt(j);
                const QList<DiffSelection> newSelection = subtractSelection(existingSelection, diffSelection);
                for (int k = 0; k < newSelection.count(); k++)
                    workingList.insert(j + k, newSelection.at(k));
                j += newSelection.count();
            }
            workingList.append(diffSelection);
        }
        m_diffSelections.insert(it.key(), workingList);
    }
}
ParameterContainer::ParameterContainer(const QMap<QString, QVariant> data)
{
   if(!data.empty()){
      QMap<QString, QVariant>::const_iterator it = data.cbegin();
      while(it != data.cend()){
         offsetSet(it.key(), it.value());
         it++;
      }
   }
}
Пример #7
0
QString AbstractLinkSql::creer(const QMap<int,QPair<bdd::createSql,bool>>& attCaract, const QMap<int, QString> &foreignKey) const
{
    QString sql(wordSqlString(bdd::wordSql::Create));
    sql.append(" ").append(m_table).append("(").append(attribut(Entity::Id)).append(" ").append(createSqlString(bdd::createSql::Primary));
    for(int i = 1; i != m_nbrAtt; ++i)
    {
        sql.append(",").append(attribut(i)).append(" ").append(createSqlString(attCaract.value(i).first));
        if(attCaract.value(i).second)
            sql.append(" ").append(createSqlString(bdd::createSql::NotNull));
    }
    for(QMap<int, QString>::const_iterator i = foreignKey.cbegin(); i != foreignKey.cend(); ++i)
        sql.append(",").append(createSqlString(bdd::createSql::Foreign)).append("(").append(attribut(i.key())).append(") ")
            .append(createSqlString(bdd::createSql::Ref)).append(" ").append(i.value());
    return sql;
}
bool OsmAnd::MapStyleEvaluator_P::evaluate(
    const std::shared_ptr<const Model::MapObject>& mapObject,
    const QMap< uint64_t, std::shared_ptr<MapStyleRule> >& rules,
    const uint32_t tagKey, const uint32_t valueKey,
    MapStyleEvaluationResult* const outResultStorage,
    bool evaluateChildren)
{
    _inputValues[_builtinValueDefs->id_INPUT_TAG].asUInt = tagKey;
    _inputValues[_builtinValueDefs->id_INPUT_VALUE].asUInt = valueKey;

    const auto ruleId = MapStyle_P::encodeRuleId(tagKey, valueKey);
    auto itRule = rules.constFind(ruleId);
    if(itRule == rules.cend())
        return false;

    return evaluate(mapObject.get(), *itRule, outResultStorage, evaluateChildren);
}
Пример #9
0
void ExternalToolsFilter::prepareSearch(const QString &entry)
{
    m_results.clear();

    Qt::CaseSensitivity useCaseSensitivity = caseSensitivity(entry);
    const QMap<QString, ExternalTool *> externalToolsById = ExternalToolManager::toolsById();
    auto end = externalToolsById.cend();
    for (auto it = externalToolsById.cbegin(); it != end; ++it) {
        ExternalTool *tool = *it;
        if (tool->description().contains(entry, useCaseSensitivity) ||
                tool->displayName().contains(entry, useCaseSensitivity)) {

            LocatorFilterEntry filterEntry(this, tool->displayName(), QVariant::fromValue(tool));
            filterEntry.extraInfo = tool->description();
            m_results.append(filterEntry);
        }
    }
}
Пример #10
0
void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs, mtpRequestId req) {
	const QVector<MTPMessage> *v = 0;
	switch (msgs.type()) {
	case mtpc_messages_messages: {
		const MTPDmessages_messages &d(msgs.c_messages_messages());
		App::feedUsers(d.vusers);
		App::feedChats(d.vchats);
		v = &d.vmessages.c_vector().v;
	} break;

	case mtpc_messages_messagesSlice: {
		const MTPDmessages_messagesSlice &d(msgs.c_messages_messagesSlice());
		App::feedUsers(d.vusers);
		App::feedChats(d.vchats);
		v = &d.vmessages.c_vector().v;
	} break;

	case mtpc_messages_channelMessages: {
		const MTPDmessages_channelMessages &d(msgs.c_messages_channelMessages());
		if (channel) {
			channel->ptsReceived(d.vpts.v);
		} else {
			LOG(("API Error: received messages.channelMessages when no channel was passed! (ApiWrap::gotWebPages)"));
		}
		if (d.has_collapsed()) { // should not be returned
			LOG(("API Error: channels.getMessages and messages.getMessages should not return collapsed groups! (ApiWrap::gotWebPages)"));
		}

		App::feedUsers(d.vusers);
		App::feedChats(d.vchats);
		v = &d.vmessages.c_vector().v;
	} break;
	}

	if (!v) return;
	QMap<uint64, int32> msgsIds; // copied from feedMsgs
	for (int32 i = 0, l = v->size(); i < l; ++i) {
		const MTPMessage &msg(v->at(i));
		switch (msg.type()) {
		case mtpc_message: msgsIds.insert((uint64(uint32(msg.c_message().vid.v)) << 32) | uint64(i), i); break;
		case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i); break;
		case mtpc_messageService: msgsIds.insert((uint64(uint32(msg.c_messageService().vid.v)) << 32) | uint64(i), i); break;
		}
	}

	for (QMap<uint64, int32>::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) {
		HistoryItem *item = App::histories().addNewMessage(v->at(i.value()), NewMessageExisting);
		if (item) {
			item->initDimensions();
			Notify::historyItemResized(item);
		}
	}

	const WebPageItems &items(App::webPageItems());
	for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend();) {
		if (i.value() == req) {
			if (i.key()->pendingTill > 0) {
				i.key()->pendingTill = -1;
				WebPageItems::const_iterator j = items.constFind(i.key());
				if (j != items.cend()) {
					for (HistoryItemsMap::const_iterator k = j.value().cbegin(), e = j.value().cend(); k != e; ++k) {
						k.key()->initDimensions();
						Notify::historyItemResized(k.key());
					}
				}
			}
			i = _webPagesPending.erase(i);
		} else {
			++i;
		}
	}
}
Пример #11
0
bool MaterialCompiler::serialize(Node *n, const QList<NodeLink *> &links, QString &typeName) {
	QMap<Node *, CompiledNodeData>::iterator it = datas.find(n);
	if(it != datas.end()) {
		typeName = it.value().type;
		return true;
	} else {
		it = datas.insert(n, {getUniqueId(), QString()});
	}

	QList<NodeLink *> endings;
	for(NodeLink *l : links) {
		if(l->getEnd()->getParent() == n) {
			endings.append(l);
		}
	}

	uint components = n->getIns().size();
	QString generic = "generic";
	for(NodeLink *l : endings) {
		QString tpe;
		if(!serialize(l->getStart()->getParent(), links, tpe)) {
			return false;
		}
		QString type = maxType(tpe, l->getStart()->getData().toMap()["type"].toString());
		components = components + computeComponents(type) - 1;
		generic =  maxType(generic, type);
	}
	components = qMax(uint(2), components);
	if(generic == "generic" && !n->getIns().isEmpty()) {
		generic = "float";
	}
	QString genericAppend = componentsToShader(components);

	QMap<Property *, QString> props;
	for(Property *e : n->getProperties()) {
		if(!e->getValue().isNull()) {
			props[e] = toShader(e->getValue());
		}
	}

	for(NodeLink *l : endings) {
		NodeOut *start = l->getStart();
		NodeIn *end = l->getEnd();
		QString var = castFunc(end, generic) + "(" +  computeName(start) + ")";
		props[end] = var;
	}

	if(props.size() != n->getProperties().size()) {
		err = CompiledMaterial::NullProperty;
		return false;
	}


	QString line = n->getData().toMap()["shader"].toString();

	if(line.contains(QRegExp("\\bgenericAppend\\b")) && components > 4) {
		err = CompiledMaterial::InvalidVector;
		return false;
	}


	it.value().type = typeName = line.indexOf(QRegExp("\\bgeneric\\b")) < line.indexOf(QRegExp("\\bgenericAppend\\b")) ? genericAppend : generic; // <<<<< ???
	line = line.replace(QRegExp("\\bgeneric\\b"), generic);
	line = line.replace(QRegExp("\\bgenericAppend\\b"), genericAppend);

	for(NodeOut *o : n->getOuts()) {
		QString arg = o->getData().toMap()["arg"].toString();
		line = line.replace(QRegExp("\\b" + arg + "\\b"), computeName(o));
	}

	for(auto it = props.cbegin(); it != props.cend(); it++) {
		Property *prop = it.key();
		QString arg = prop->getData().toMap()["arg"].toString();
		line = line.replace(QRegExp("\\b" + arg + "\\b"), it.value());
	}
	shader += line + "\n";

	return true;
}
Пример #12
0
void FuzzySearchImpl::query(const QString &req, QVector<Service::Item *> *res) const
{
	QVector<QString> words;
	for (QString &word : req.split(QRegExp("\\W+"), QString::SkipEmptyParts))
		words.append(word.toLower());
	QVector<QMap<Service::Item *, unsigned int>> resultsPerWord;

	// Quit if there are no words in query
	if (words.empty())
		return;

	// Split the query into words
	for (QString &word : words)
	{
		unsigned int delta = word.size()/3;

		// Get qGrams with counts of this word
		QMap<QString, unsigned int> qGrams;
		QString spaced(_q-1,' ');
		spaced.append(word.toLower());
		for (unsigned int i = 0 ; i < static_cast<unsigned int>(word.size()); ++i)
			++qGrams[spaced.mid(i,_q)];

		// Get the words referenced by each qGram an increment their
		// reference counter
		QMap<QString, unsigned int> wordMatches;
		// Iterate over the set of qgrams in the word
		for (QMap<QString, unsigned int>::const_iterator it = qGrams.cbegin(); it != qGrams.end(); ++it)
		{
			// Iterate over the set of words referenced by this qGram
			for (QMap<QString, unsigned int>::const_iterator wit = _qGramIndex[it.key()].begin(); wit != _qGramIndex[it.key()].cend(); ++wit)
			{
				// CRUCIAL: The match can contain only the commom amount of qGrams
				wordMatches[wit.key()] += (it.value() < wit.value()) ? it.value() : wit.value();
			}
		}

		// Allocate a new set
		resultsPerWord.push_back(QMap<Service::Item *, unsigned int>());
		QMap<Service::Item *, unsigned int>& resultsRef = resultsPerWord.back();

		// Unite the items referenced by the words accumulating their #matches
		for (QMap<QString, unsigned int>::const_iterator wm = wordMatches.begin(); wm != wordMatches.cend(); ++wm)
		{
//			// Do some kind of (cheap) preselection by mathematical bound
//			if (wm.value() < qGrams.size()-delta*_q)
//				continue;

			// Now check the (expensive) prefix edit distance
			if (!checkPrefixEditDistance(word, wm.key(), delta))
				continue;


			for(Service::Item * item: _invertedIndex[wm.key()])
			{
				resultsRef[item] += wm.value();
			}
		}
	}

	// Intersect the set of items references by the (referenced) words
	// This assusmes that there is at least one word (the query would not have
	// been started elsewise)
	QVector<QPair<Service::Item *, unsigned int>> finalResult;
	if (resultsPerWord.size() > 1)
	{
		// Get the smallest list for intersection (performance)
		unsigned int smallest=0;
		for (unsigned int i = 1; i < static_cast<unsigned int>(resultsPerWord.size()); ++i)
			if (resultsPerWord[i].size() < resultsPerWord[smallest].size())
				smallest = i;

		bool allResultsContainEntry;
		for (QMap<Service::Item *, unsigned int>::const_iterator r = resultsPerWord[smallest].begin(); r != resultsPerWord[smallest].cend(); ++r)
		{
			// Check if all results contain this entry
			allResultsContainEntry=true;
			unsigned int accMatches = resultsPerWord[smallest][r.key()];
			for (unsigned int i = 0; i < static_cast<unsigned int>(resultsPerWord.size()); ++i)
			{
				// Ignore itself
				if (i==smallest)
					continue;

				// If it is in: check next relutlist
				if (resultsPerWord[i].contains(r.key()))
				{
					// Accumulate matches
					accMatches += resultsPerWord[i][r.key()];
					continue;
				}

				allResultsContainEntry = false;
				break;
			}

			// If this is not common, check the next entry
			if (!allResultsContainEntry)
				continue;

			// Finally this match is common an can be put into the results
			finalResult.append(QPair<Service::Item *, unsigned int>(r.key(), accMatches));
		}
	}
	else // Else do it without intersction
	{
		for (QMap<Service::Item *, unsigned int>::const_iterator r = resultsPerWord[0].begin(); r != resultsPerWord[0].cend(); ++r)
			finalResult.append(QPair<Service::Item *, unsigned int>(r.key(), r.value()));
	}

	// Sort em by relevance
	std::sort(finalResult.begin(), finalResult.end(),
			  [&](QPair<Service::Item *, unsigned int> x, QPair<Service::Item *, unsigned int> y)
				{return x.second > y.second;});

	for (QPair<Service::Item *, unsigned int> pair : finalResult){
		res->append(pair.first);
	}
}