X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/cfe8322b50c9ef08ffbc3e52b0849bca4cd1d0bf..eb12792fe5344f4d128b8aba2a7948aa13f6a1ae:/AbstractBlock.cpp diff --git a/AbstractBlock.cpp b/AbstractBlock.cpp index c71b2e0..cdde69f 100644 --- a/AbstractBlock.cpp +++ b/AbstractBlock.cpp @@ -10,7 +10,7 @@ AbstractBlock::AbstractBlock() { } AbstractBlock::AbstractBlock(const QString& _name) { - name = _name; + name = normalizeName(_name); parent = NULL; } @@ -25,7 +25,7 @@ AbstractBlock::~AbstractBlock() { } void AbstractBlock::setName(const QString& str) { - name = str; + name = normalizeName(str); } void AbstractBlock::setParent(AbstractBlock* _parent) { @@ -51,11 +51,12 @@ bool AbstractBlock::isTopGroupBlock() { bool AbstractBlock::isSourceBlock() { return false; } - +/* NB: a generator is a block that has no data inputs + * and has at least one data output. + */ bool AbstractBlock::isGeneratorBlock() { - foreach(AbstractInterface* iface, inputs) { - if (iface->getPurpose() == AbstractInterface::Data) return false; - } + if (getDataInputs().size() > 0) return false; + return true; } @@ -126,42 +127,58 @@ void AbstractBlock::defineBlockParam(BlockParameter *param) param->setValue(value); } -QList AbstractBlock::getInterfaces() { +QList AbstractBlock::getInterfaces(int direction, int purpose) { QList list; - list.append(inputs); - list.append(outputs); - list.append(bidirs); + bool selIn = false; + bool selOut = false; + bool selInOut = false; + + if (direction == AbstractInterface::AnyDirection) { + selIn = true; + selOut = true; + selInOut = true; + } + else if (direction == AbstractInterface::Input) { + selIn = true; + } + else if (direction == AbstractInterface::Output) { + selOut = true; + } + else if (direction == AbstractInterface::InOut) { + selInOut = true; + } + if (selIn) { + foreach(AbstractInterface* iface, inputs) { + if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface); + } + } + if (selOut) { + foreach(AbstractInterface* iface, outputs) { + if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface); + } + } + if (selInOut) { + foreach(AbstractInterface* iface, bidirs) { + if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface); + } + } return list; } QList AbstractBlock::getDataInputs() { - QList list; - foreach(AbstractInterface* iface, inputs) { - if (iface->getPurpose() == AbstractInterface::Data) { - list.append(iface); - } - } - return list; + return getInterfaces(AbstractInterface::Input, AbstractInterface::Data); +} + +QList AbstractBlock::getDataOutputs() { + return getInterfaces(AbstractInterface::Output, AbstractInterface::Data); } QList AbstractBlock::getControlInputs() { - QList list; - foreach(AbstractInterface* iface, inputs) { - if (iface->getPurpose() == AbstractInterface::Control) { - list.append(iface); - } - } - return list; + return getInterfaces(AbstractInterface::Input, AbstractInterface::Control); } QList AbstractBlock::getControlOutputs() { - QList list; - foreach(AbstractInterface* iface, outputs) { - if (iface->getPurpose() == AbstractInterface::Control) { - list.append(iface); - } - } - return list; + return getInterfaces(AbstractInterface::Output, AbstractInterface::Control); } AbstractInterface* AbstractBlock::getIfaceFromName(QString name) { @@ -217,3 +234,12 @@ QList AbstractBlock::getWishboneParameters() { } return lst; } + +QString AbstractBlock::normalizeName(const QString &name) { + QString s = name; + s.replace(QRegularExpression("[^a-zA-Z0-9_]"),"_"); + s.replace(QRegularExpression("[_]+"),"_"); + return s; +} + +