]> AND Private Git Repository - blast.git/blob - FunctionalBlock.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
9852eb7b33e25c89f94733316066b6e39cc3f1c1
[blast.git] / FunctionalBlock.h
1 #ifndef __FUNCTIONALBLOCK_H__\r
2 #define __FUNCTIONALBLOCK_H__\r
3 \r
4 #include <iostream>\r
5 \r
6 #include <QtCore>\r
7 \r
8 #include "AbstractBlock.h"\r
9 class AbstractBlock;\r
10 class ReferenceBlock;\r
11 class GroupBlock;\r
12 #include "Exception.h"\r
13 class Exception;\r
14 \r
15 \r
16 using namespace std;\r
17 using namespace Qt;\r
18 \r
19 /* NOTES :\r
20    - NEVER forget to call populate() after creating an instance of GraphBlock.\r
21  */\r
22 \r
23 class FunctionalBlock : public AbstractBlock {\r
24 public:\r
25 \r
26   FunctionalBlock(GroupBlock* _parent, ReferenceBlock* _reference) throw(Exception);\r
27 \r
28   // getters\r
29   inline ReferenceBlock* getReference() { return reference; }\r
30 \r
31   // setters\r
32 \r
33   // testers\r
34   bool isFunctionalBlock();\r
35   bool isSourceBlock(); //! a source block has no parent and has no data inputs\r
36 \r
37   // others\r
38 \r
39   void populate(); // create parameters and interface from reference block\r
40   void parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock*>* blocksToConfigure);\r
41 \r
42   QString getReferenceXmlFile();\r
43   QString getReferenceHashMd5();\r
44   \r
45   // patterns\r
46   void initConsumptionPattern(); // initialize a char** from patterns defined for each interface\r
47   void initProductionPattern(); // initialize a char** from patterns defined for each interface\r
48   void clearConsumptionPattern();\r
49   void clearProductionPattern();\r
50   \r
51 private:  \r
52   // patterns\r
53   void computeOutputPattern(int nbExec = -1);\r
54   bool isValidDataGroup(char** pattern, int nbPorts, int clock);\r
55   /*!\r
56    * \brief combinePatterns\r
57    * \param patternSrc the pattern that must be combined with patternDest (patternDest = patternDest OR patternSrc)  \r
58    * \param srcCol the column index within patternSrc\r
59    * \param patternDest the pattern that is modified by the combination (patternDest = patternDest OR patternSrc)\r
60    * \param destClock the column index within patternDest\r
61    * \param nbCols the numer of columns to combine\r
62    * \param nbPorts the number of rows in both patterns\r
63    * BEWARE: no check is done if nbCols is consistent with the real length of both patterns, thus an access outside\r
64    * the patterns is possible.\r
65    */\r
66   void combinePatterns(char** patternSrc, int srcCol, char** patternDest, int destCol, int nbCols, int nbPorts );\r
67 \r
68   char** consumptionPattern;\r
69   int nbConsumingPorts;\r
70   int lengthCP;\r
71   char** productionPattern;\r
72   int nbProducingPorts;\r
73   int lengthPP;\r
74   \r
75   ReferenceBlock* reference;\r
76 \r
77 };\r
78 \r
79 #endif // __FUNCTIONALBLOCK_H__\r