X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/abbc64cf04a35ab3549d5c516f44c7c5921baa63..48f48e6a26a54751ecd0ab90b10ab972cc5e89cd:/FunctionalBlock.h?ds=inline diff --git a/FunctionalBlock.h b/FunctionalBlock.h index 1360244..b6ac65f 100644 --- a/FunctionalBlock.h +++ b/FunctionalBlock.h @@ -11,6 +11,9 @@ class ReferenceBlock; class GroupBlock; #include "Exception.h" class Exception; +class BlockImplementation; +class ArithmeticEvaluator; + using namespace std; @@ -27,11 +30,18 @@ public: // getters inline ReferenceBlock* getReference() { return reference; } - + inline QList getProductionCounter() { return productionCounter; } + inline int getDelta() { return delta; } + // setters + inline void setImplementation(BlockImplementation* impl) { implementation = impl; } + inline void setProductionCounter(QList pattern) { productionCounter = pattern; } + inline void setDelta(int _delta) { delta = _delta; } + // testers bool isFunctionalBlock(); + bool isSourceBlock(); //! a source block has no parent and has no data inputs // others @@ -40,9 +50,51 @@ public: QString getReferenceXmlFile(); QString getReferenceHashMd5(); - + + // patterns + bool createPatterns(); + bool createDelta(); + bool createConsumptionPattern(); // initialize a QList for each interface from patterns defined in implementation + bool createProductionPattern(); // initialize a QList for each interface from patterns defined in implementation + bool createProductionCounter(); // initialize a QList from counter defined in implementation + void initConsumptionPattern(); // initialize a char** from patterns defined for each interface + void initProductionPattern(); // initialize a char** from patterns defined for each interface + void clearConsumptionPattern(); + void clearProductionPattern(); + bool computeOutputPattern(int nbExec = -1); + private: + // patterns + bool isValidDataGroup(char** pattern, int nbPorts, int clock); + double evaluateExpression(const QString& expression, bool* ok); + QList expandPattern(const QString& pattern, bool* ok); + QList expandPatternRecur(const QString& pattern, int* offset, bool* ok); + /*! + * \brief combinePatterns + * \param patternSrc the pattern that must be combined with patternDest (patternDest = patternDest OR patternSrc) + * \param srcCol the column index within patternSrc + * \param patternDest the pattern that is modified by the combination (patternDest = patternDest OR patternSrc) + * \param destClock the column index within patternDest + * \param nbCols the numer of columns to combine + * \param nbPorts the number of rows in both patterns + * BEWARE: no check is done if nbCols is consistent with the real length of both patterns, thus an access outside + * the patterns is possible. + */ + void combinePatterns(char** patternSrc, int srcCol, char** patternDest, int destCol, int nbCols, int nbPorts ); + + QList productionCounter; //! only usefull for output interfaces + int delta; + + char** consumptionPattern; + int nbConsumingPorts; + int lengthCP; + char** productionPattern; + int nbProducingPorts; + int lengthPP; + ArithmeticEvaluator* evaluator; + ReferenceBlock* reference; + BlockImplementation* implementation; };