X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/77e28a24d444098399304f0175b1aba43c83017f..14cd6d834ab531525a51c6a6992583b3e9143e02:/Parameters.cpp?ds=sidebyside diff --git a/Parameters.cpp b/Parameters.cpp index 46437c3..2ee6255 100644 --- a/Parameters.cpp +++ b/Parameters.cpp @@ -574,10 +574,27 @@ void Parameters::loadBlastConfiguration(QString confFile) throw(Exception) { implPathes.append(path); cout << "impl path : " << qPrintable(path) << endl << endl; } + + QDomElement eltSource = eltImpl.nextSiblingElement("sources"); + nbPathesStr = eltSource.attribute("nb","none"); + nbPathes = nbPathesStr.toInt(&ok); + QDomNodeList listSourceDir = eltSource.elementsByTagName("source_lib"); + if ((!ok) || (nbPathes != listSourceDir.size())) throw(Exception(CONFIGFILE_CORRUPTED)); + + for(int i=0;i<listSourceDir.size();i++) { + QDomNode nodeSourceDir = listSourceDir.at(i); + QDomElement eltSourceDir = nodeSourceDir.toElement(); + if (eltSourceDir.isNull()) throw(Exception(CONFIGFILE_CORRUPTED)); + QString path = eltSourceDir.attribute("path","none"); + if (path == "none") throw(Exception(CONFIGFILE_CORRUPTED)); + sourcePathes.append(path); + cout << "core path : " << qPrintable(path) << endl << endl; + } + // getting elt = the element <defaults> // for each child element, initialize the associated attributes of Parameters - QDomElement eltDefaults = eltImpl.nextSiblingElement("defaults"); + QDomElement eltDefaults = eltSource.nextSiblingElement("defaults"); QDomElement eltBlocks = eltDefaults.firstChildElement("blocks"); QString attributeStr = eltBlocks.attribute("width", "none"); @@ -807,6 +824,22 @@ void Parameters::loadImplementationsFromXml() throw(Exception) { QString refXml = implRoot.attribute("ref_name","none"); QString refMd5 = implRoot.attribute("ref_md5","none"); BlockImplementation* impl = new BlockImplementation(fileName,refXml,refMd5); + + QDomNodeList archNode = implRoot.elementsByTagName("architecture"); + + if (archNode.isEmpty()) { + cout << "impl has no architecture" << endl; + return; + } + QDomElement archElt = archNode.at(0).toElement(); + QString compList = archElt.attribute("comp_list","none"); + if (compList != "none") { + QStringList compos = compList.split(","); + foreach(QString s, compos) { + impl->addResource(s); + } + } + try { impl->loadPatterns(implRoot); } @@ -908,6 +941,74 @@ void Parameters::saveImplementationsToLib() throw(Exception) { libFile.close(); } + + +void Parameters::loadSources() throw(Exception) { + + for(int i=0;i<sourcePathes.size();i++) { + cout << "analyzing " << qPrintable(sourcePathes.at(i)) << endl; + QDir dir(sourcePathes.at(i)); + QStringList filter; + filter << "*.vhd" << "*.ngc"; + dir.setNameFilters(filter); + QStringList list = dir.entryList(); + for(int j=0;j<list.size();j++) { + QString fileName = dir.absolutePath(); + fileName.append("/"+list.at(j)); + + if (list.at(j).endsWith(".ngc")) { + QString netName = list.at(j); + netName.truncate(list.at(j).size() -4); + cout << "found netlist " << qPrintable(netName) << endl; + availableResources.append(new ExternalResource(netName,fileName,ExternalResource::Netlist)); + } + else { + cout << "parsing " << qPrintable(fileName) << " ... "; + QFile srcXML(fileName); + if (!srcXML.open(QIODevice::ReadOnly)) { + throw(Exception(IMPLFILE_NOACCESS)); + } + QTextStream in(&srcXML); + + QString line = in.readLine(); + while (!line.isNull()) { + if (line.contains("package", Qt::CaseInsensitive)) { + QRegularExpression rxPack("^package (.+) is$",QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch matchPack = rxPack.match(line); + if (matchPack.hasMatch()) { + QString packName = matchPack.captured(1); + cout << "found package " << qPrintable(packName) << endl; + availableResources.append(new ExternalResource(packName,fileName,ExternalResource::Package)); + } + } + else if (line.contains("entity", Qt::CaseInsensitive)) { + QRegularExpression rxEnt("^entity (.+) is$",QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch matchEnt = rxEnt.match(line); + if (matchEnt.hasMatch()) { + QString entityName = matchEnt.captured(1); + cout << "found entity " << qPrintable(entityName) << endl; + availableResources.append(new ExternalResource(entityName,fileName,ExternalResource::Code)); + } + } + line = in.readLine(); + } + srcXML.close(); + cout << "OK" << endl; + } + } + } +} + +QList<ExternalResource *> Parameters::searchResourceByName(const QString& name) { + QList<ExternalResource*> listRes; + foreach(ExternalResource* s, availableResources) { + if (s->getName() == name) { + listRes.append(s); + } + } + return listRes; +} + void Parameters::addAvailableBlock(ReferenceBlock *block) { availableBlocks.append(block); foreach (int id,block->getCategories()) {