Ejemplo n.º 1
0
void QEvalInstrucGenerator::appendEdgeQueryInstruc(std::queue<QEvalInstruc>& instrucQueue, const QueryData &qData, std::vector<bool> &qtClausePushed)
{
	if (!qData.getQueryTarget().isBool()) {
		appendEdgeQueryOnePath(instrucQueue, qData, qData.getQueryTarget().getTarArgIdx(), qtClausePushed);
	}

	arg_idx_t target;

	bool finded = false;
	for (int i = 0; i < (int)qtClausePushed.size(); i++) {
		if (!qtClausePushed[i]) {
			target = *(qData.getQEvalClause(i)->inVarArgIdxSet.begin());
			finded = true;
		}
	}
	while (finded) {
		appendEdgeQueryOnePath(instrucQueue, qData, target, qtClausePushed);
		finded = false;
		for (int i = 0; i < (int)qtClausePushed.size(); i++) {
			if (!qtClausePushed[i]) {
				target = *(qData.getQEvalClause(i)->inVarArgIdxSet.begin());
				finded = true;
			}
		}
	}
}