X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/dd3fe103df79a5a4c2962e2f05fec9a9ed58580d..9ea814d76cc52e24b80be4a6ea78cca24a9a4915:/ReferenceBlock.cpp?ds=sidebyside diff --git a/ReferenceBlock.cpp b/ReferenceBlock.cpp index e09b118..a31db67 100644 --- a/ReferenceBlock.cpp +++ b/ReferenceBlock.cpp @@ -157,7 +157,7 @@ void ReferenceBlock::loadParameters(QDomElement &elt) throw(Exception) { valueStr = ""; } if (contextStr == "user") { - param = new BlockParameterUser(this,nameStr,valueStr); + param = new BlockParameterUser(this,nameStr,typeStr,valueStr); } else if (contextStr == "generic") { param = new BlockParameterGeneric(this,nameStr,typeStr,valueStr); @@ -251,11 +251,12 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) { nameStr = eltInput.attribute("iface","none"); AbstractInterface* dataIface = getIfaceFromName(nameStr); if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED)); - nameStr = dataIface->getName()+"_ctl"; + nameStr = dataIface->getName()+"_enb"; inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Input, AbstractInterface::Control, 1); if (!inter->setAssociatedIface(dataIface)) { throw (Exception(BLOCKFILE_CORRUPTED)); } + cout << "created a control input named " << qPrintable(inter->getName()) << endl; inputs.append(inter); } QDomElement eltOutputs = eltInputs.nextSiblingElement("outputs"); @@ -282,11 +283,12 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) { nameStr = eltOutput.attribute("iface","none"); AbstractInterface* dataIface = getIfaceFromName(nameStr); if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED)); - nameStr = dataIface->getName()+"_ctl"; + nameStr = dataIface->getName()+"_enb"; inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Output, AbstractInterface::Control, 1); if (!inter->setAssociatedIface(dataIface)) { throw (Exception(BLOCKFILE_CORRUPTED)); } + cout << "created a control output named " << qPrintable(inter->getName()) << endl; outputs.append(inter); } @@ -376,22 +378,50 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) { } toWrite << b.inputs.size(); + // firstly write control ifaces for(int i=0; igetName(); - toWrite << iface->getWidth(); - toWrite << iface->getPurpose(); - toWrite << iface->getDirection(); - toWrite << iface->getMultiplicity(); + if (iface->getPurpose() == AbstractInterface::Control) { + toWrite << iface->getName(); + toWrite << iface->getWidth(); + toWrite << iface->getPurpose(); + toWrite << iface->getDirection(); + toWrite << iface->getMultiplicity(); + } + } + // secondly, write other ifaces + for(int i=0; igetPurpose() != AbstractInterface::Control) { + toWrite << iface->getName(); + toWrite << iface->getWidth(); + toWrite << iface->getPurpose(); + toWrite << iface->getDirection(); + toWrite << iface->getMultiplicity(); + } } toWrite << b.outputs.size(); + // firstly write control ifaces for(int i=0; igetName(); - toWrite << iface->getWidth(); - toWrite << iface->getPurpose(); - toWrite << iface->getDirection(); - toWrite << iface->getMultiplicity(); + if (iface->getPurpose() == AbstractInterface::Control) { + toWrite << iface->getName(); + toWrite << iface->getWidth(); + toWrite << iface->getPurpose(); + toWrite << iface->getDirection(); + toWrite << iface->getMultiplicity(); + } + } + // secondly, write other ifaces + for(int i=0; igetPurpose() != AbstractInterface::Control) { + toWrite << iface->getName(); + toWrite << iface->getWidth(); + toWrite << iface->getPurpose(); + toWrite << iface->getDirection(); + toWrite << iface->getMultiplicity(); + } } toWrite << b.bidirs.size(); for(int i=0; i>(QDataStream &in, ReferenceBlock &b) { in >> valueStr; if (contextStr == "user") { - p = new BlockParameterUser(&b,nameStr,valueStr); + p = new BlockParameterUser(&b,nameStr,typeStr,valueStr); } else if (contextStr == "generic") { p = new BlockParameterGeneric(&b,nameStr,typeStr,valueStr); @@ -474,12 +504,21 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { in >> txt; iface->setWidth(txt); in >> val; - iface->setPurpose(val); + iface->setPurpose(val); in >> val; iface->setDirection(val); in >> val; iface->setMultiplicity(val); b.inputs.append(iface); + if (iface->getPurpose() == AbstractInterface::Data) { + QString ctlRefName = iface->getName()+"_enb"; + ReferenceInterface* ctlRefIface = AI_TO_REF(b.getIfaceFromName(ctlRefName)); + if (ctlRefIface != NULL) { + if (! ctlRefIface->setAssociatedIface(iface)) { + cerr << "Abnormal case while reading a reference block in library" << endl; + } + } + } } b.outputs.clear(); @@ -491,12 +530,21 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { in >> txt; iface->setWidth(txt); in >> val; - iface->setPurpose(val); + iface->setPurpose(val); in >> val; iface->setDirection(val); in >> val; iface->setMultiplicity(val); b.outputs.append(iface); + if (iface->getPurpose() == AbstractInterface::Data) { + QString ctlRefName = iface->getName()+"_enb"; + ReferenceInterface* ctlRefIface = AI_TO_REF(b.getIfaceFromName(ctlRefName)); + if (ctlRefIface != NULL) { + if (! ctlRefIface->setAssociatedIface(iface)) { + cerr << "Abnormal case while reading a reference block in library" << endl; + } + } + } } b.bidirs.clear(); @@ -518,3 +566,12 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { return in; } + +void ReferenceBlock::checkInputPatternCompatibility() throw(Exception){ + throw(Exception(INVALID_REFBLOCK_USE)); +} + +void ReferenceBlock::computeOutputPattern(int nbExec) throw(Exception) { + // does strictly nothing + throw(Exception(INVALID_REFBLOCK_USE)); +}