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

Private GIT Repository
start modifying read/write blocks and project to take into account control ifaces
[blast.git] / BlockParameterPort.cpp
1 #include "BlockParameterPort.h"\r
2 #include "ArithmeticEvaluator.h"\r
3 #include "FunctionalBlock.h"\r
4 #include "FunctionalInterface.h"\r
5 \r
6 BlockParameterPort::BlockParameterPort() : BlockParameter() {\r
7   ifaceName = "";\r
8 }\r
9 \r
10 BlockParameterPort::BlockParameterPort(AbstractBlock* _owner, const QString &_name, const QString &_value, const QString &_ifaceName) : BlockParameter(_owner, _name, "expression", _value) {\r
11   ifaceName = _ifaceName;\r
12 }\r
13 \r
14 bool BlockParameterPort::isPortParameter() {\r
15   return true;\r
16 }\r
17 \r
18 BlockParameter* BlockParameterPort::clone() {\r
19   BlockParameter* block = new BlockParameterPort(owner,name,defaultValue.toString(),ifaceName);\r
20   return block;\r
21 }\r
22 \r
23 QString BlockParameterPort::toVHDL(int context, int flags) {\r
24   QString expr="";\r
25   QString ret="";\r
26   ArithmeticEvaluator evaluator;\r
27 \r
28   if (!defaultValue.isNull()) {\r
29     expr = defaultValue.toString();\r
30     try {\r
31       evaluator.setVariableMarkers("$");\r
32       evaluator.setExpression(expr);\r
33 \r
34       double ifaceNb = 0.0;\r
35       double ifaceWidth = 0.0;\r
36       FunctionalInterface* iface = (FunctionalInterface*)(owner->getIfaceFromName(ifaceName));\r
37       if (iface == NULL) return "INVALID_INTERFACE_NAME";\r
38 \r
39       // must get the number of instance of\r
40       ifaceNb = iface->getInterfaceMultiplicity();\r
41 \r
42       int result = 0;\r
43       evaluator.setVariableValue("$if_width",ifaceWidth);\r
44       evaluator.setVariableValue("$if_nb",ifaceNb);\r
45       result = (int)(evaluator.evaluate());\r
46       ret.setNum(result);\r
47     }\r
48     catch(int e) {\r
49       cerr << "invalid expression in port parameter " << qPrintable(name) << " at character " << e << endl;\r
50     }\r
51   }\r
52 \r
53   return ret;\r
54 }\r
55 \r
56 void BlockParameterPort::setIfaceName(const QString& _ifaceName) {\r
57   ifaceName = _ifaceName;\r
58 }\r