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

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / BlockImplementation.h
1 #ifndef __BLOCKIMPLEMENTATION_H__\r
2 #define __BLOCKIMPLEMENTATION_H__\r
3 \r
4 #include <iostream>\r
5 #include <fstream>\r
6 \r
7 #include <QtCore>\r
8 #include <QtXml>\r
9 \r
10 class ReferenceBlock;\r
11 class FunctionalBlock;\r
12 class AbstractInterface;\r
13 \r
14 #include "ArithmeticEvaluator.h"\r
15 class ArithmeticEvaluator;\r
16 \r
17 #include "Exception.h"\r
18 class Exception;\r
19 \r
20 using namespace std;\r
21 using namespace Qt;\r
22 \r
23 class BlockImplementation {\r
24 \r
25 public:\r
26 \r
27   BlockImplementation(const QString& _xmlFile);\r
28   BlockImplementation(const QString& _xmlFile, const QString& _referenceXml, const QString& _referenceMd5);\r
29 \r
30   // getters  \r
31   inline QString getXmlFile() { return xmlFile; }\r
32   inline QString getReferenceXml() { return referenceXml; }\r
33   inline QString getReferenceMd5() { return referenceMd5; }\r
34   inline QString getDelta() { return delta; }\r
35   inline QHash<QString,QString> getConsumptionPattern() { return consumptionPattern; }\r
36   inline QHash<QString,QString> getProductionPattern() { return productionPattern; }\r
37   inline QString getProductionCounter() { return productionCounter; }\r
38 \r
39   // setters\r
40   inline void setDelta(QString _delta) { delta = _delta; }\r
41   inline void setConsumptionPattern(QHash<QString,QString> pattern) { consumptionPattern = pattern; }\r
42   inline void setProductionPattern(QHash<QString,QString> pattern) { productionPattern = pattern; }\r
43   inline void setProductionCounter(QString pattern) { productionCounter = pattern; }\r
44   \r
45   // testers\r
46 \r
47   inline bool hasNoPatterns() { return noPatterns; }\r
48 \r
49   QString eval(QString line, QTextStream& out);\r
50   QString evalComplex(QString line, int num);\r
51   QString evalString(QString s);\r
52   QList<AbstractInterface*>* evalStringComplex(QString s);\r
53   QString evalValue(QString s);\r
54   QString calculateWidth(QString s);\r
55 \r
56   inline void setReference(ReferenceBlock* _reference) { reference = _reference; }\r
57 \r
58   void loadPatterns(QDomElement &root) throw(Exception);\r
59   bool checkPatterns();  \r
60   \r
61   inline void addSource(QString file) { sources.append(file); }\r
62 private:  \r
63   QString xmlFile;\r
64   QString referenceXml;\r
65   QString referenceMd5;\r
66 \r
67   QList<QString> sources;\r
68 \r
69   QMap<QString, int> paramMap;\r
70   ArithmeticEvaluator* evaluator;\r
71   ReferenceBlock* reference;\r
72   FunctionalBlock* block; // the current functional block for which this implementation is used.\r
73   bool noPatterns;\r
74   QString delta;\r
75   QHash<QString,QString> consumptionPattern; // key = reference interface name, value = pattern expression\r
76   QHash<QString,QString> productionPattern; // key = reference interface name, value = pattern expression\r
77   QString productionCounter;\r
78 \r
79   QString getIfaceUserName(AbstractInterface* refIface); // get the name of an interface given by the user, from the reference interface\r
80 \r
81   friend QDataStream &operator<<(QDataStream &out, const BlockImplementation &impl);\r
82   friend QDataStream &operator>>(QDataStream &in, BlockImplementation &impl);\r
83 };\r
84 \r
85 #endif // __BLOCKIMPLEMENTATION_H__\r
86 \r