X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/e40a5399ec7887c2606f18575c809b0d05b09278..8fb3c55ee009a11db5e1c08a4cfb286979412745:/SpecialBlock.cpp?ds=inline diff --git a/SpecialBlock.cpp b/SpecialBlock.cpp index 8edff6f..8c7cc10 100644 --- a/SpecialBlock.cpp +++ b/SpecialBlock.cpp @@ -1,20 +1,30 @@ #include "SpecialBlock.h" +#include "FunctionalInterface.h" -SpecialBlock::SpecialBlock(SpecialType _type, GroupBlock* _parent, ReferenceBlock* _reference, bool createIfaces) throw(Exception) : FunctionalBlock(_parent, _reference, createIfaces) { - type = _type; +SpecialBlock::SpecialBlock(int _type, GroupBlock* _parent, ReferenceBlock* _reference, bool createIfaces) throw(Exception) : FunctionalBlock(_parent, _reference, createIfaces) { + specialType = _type; } SpecialBlock::~SpecialBlock() { } +bool SpecialBlock::isSpecialBlock() { + return true; +} + void SpecialBlock::checkInputPatternCompatibility() throw(Exception) { try { - switch(type) { - case ClockConvert : + switch(specialType) { + case Source : + checkInputPatternCompatibilitySource(); + break; + case Sink : + checkInputPatternCompatibilitySink(); + break; + case ClkConvert : checkInputPatternCompatibilityClockConvert(); break; - case ClkRstGen: - checkInputPatternCompatibilityClkRstGen(); + default: break; } } @@ -25,12 +35,17 @@ void SpecialBlock::checkInputPatternCompatibility() throw(Exception) { void SpecialBlock::computeOutputPattern(int nbExec) throw(Exception) { try { - switch(type) { - case ClockConvert : - computeOutputPatternClockConvert(nbExec); + switch(specialType) { + case Source : + computeOutputPatternSource(nbExec); break; - case ClkRstGen: - computeOutputPatternClkRstGen(nbExec); + case Sink : + computeOutputPatternSink(nbExec); + break; + case ClkConvert : + computeOutputPatternClockConvert(nbExec); + break; + default: break; } } @@ -39,13 +54,33 @@ void SpecialBlock::computeOutputPattern(int nbExec) throw(Exception) { } } -void SpecialBlock::checkInputPatternCompatibilityClockConvert() throw(Exception) { +void SpecialBlock::checkInputPatternCompatibilitySource() throw(Exception) { } -void SpecialBlock::computeOutputPatternClockConvert(int nbExec) throw(Exception) { +void SpecialBlock::computeOutputPatternSource(int nbExec) throw(Exception) { + + cout << "computing output pattern of " << qPrintable(name) << " for " << nbExec << " executions" << endl; + foreach(AbstractInterface* iface, getControlOutputs()) { + FunctionalInterface* connIface = AI_TO_FUN(iface); + // create output pattern + QList* pp = productionPattern.value(connIface); + QList* pattern = new QList(*pp); + for(int i=1;iappend(*pp); + // assign pattern to interface + connIface->setOutputPattern(pattern); + // store it in QMap + outputPattern.insert(connIface,pattern); + } + setOutputPatternComputed(true); } +void SpecialBlock::checkInputPatternCompatibilitySink() throw(Exception) { +} +void SpecialBlock::computeOutputPatternSink(int nbExec) throw(Exception) { +} -void SpecialBlock::checkInputPatternCompatibilityClkRstGen() throw(Exception) { +void SpecialBlock::checkInputPatternCompatibilityClockConvert() throw(Exception) { } -void SpecialBlock::computeOutputPatternClkRstGen(int nbExec) throw(Exception) { +void SpecialBlock::computeOutputPatternClockConvert(int nbExec) throw(Exception) { } + +