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

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / BlockParameterGeneric.cpp
1 #include "BlockParameterGeneric.h"\r
2 #include "GroupBlock.h"\r
3 #include "FunctionalBlock.h"\r
4 \r
5 BlockParameterGeneric::BlockParameterGeneric() : BlockParameter() {\r
6   userValue = defaultValue;\r
7 }\r
8 \r
9 BlockParameterGeneric::BlockParameterGeneric(AbstractBlock* _owner, const QString &_name, const QString &_type, const QString &_value) : BlockParameter(_owner, _name, _type, _value) {\r
10   /* CAUTION: no check done on the type parameter !\r
11    * It must never be "expression" but something that is numeric/boolean\r
12    */\r
13   userValue = defaultValue;\r
14 }\r
15 \r
16 QVariant BlockParameterGeneric::getValue() {\r
17   if (isValueSet()) {\r
18     return userValue;\r
19   }\r
20   return defaultValue;\r
21 }\r
22 \r
23 bool BlockParameterGeneric::isGenericParameter() {\r
24   return true;\r
25 }\r
26 \r
27 void BlockParameterGeneric::setValue(const QString& _value) {\r
28   userValue = QVariant(_value);\r
29 }\r
30 \r
31 \r
32 bool BlockParameterGeneric::isValueSet() {\r
33   if (userValue.isNull()) return false;\r
34   return true;\r
35 }\r
36 \r
37 bool BlockParameterGeneric::isDefaultValue() {\r
38   if (userValue == defaultValue) return true;\r
39   return false;\r
40 }\r
41 \r
42 BlockParameter* BlockParameterGeneric::clone() {  \r
43 \r
44   BlockParameter* block = new BlockParameterGeneric(owner,name,getTypeString(),defaultValue.toString());\r
45   return block;\r
46 }\r
47 \r
48 QString BlockParameterGeneric::toVHDL(int context, int flags) {\r
49 \r
50   QString ret="";\r
51 \r
52 \r
53   if ((context == BlockParameter::Entity) || (context == BlockParameter::Component)) {\r
54 \r
55     QString formatValue = "%1 : %2 := %3";\r
56     QString formatNoValue = "%1 : %2";\r
57     if ((flags & BlockParameter::NoComma) == 0) {\r
58       formatValue.append(";");\r
59       formatNoValue.append(";");\r
60     }\r
61 \r
62     if (!userValue.isNull()) {\r
63       ret = formatValue.arg(name).arg(getTypeString()).arg(userValue.toString());\r
64     }\r
65     else if (!defaultValue.isNull()) {\r
66       ret = formatValue.arg(name).arg(getTypeString()).arg(defaultValue.toString());\r
67     }\r
68     else {\r
69       ret = formatNoValue.arg(name).arg(getTypeString());\r
70     }\r
71   }\r
72   else if (context == BlockParameter::Instance) {\r
73     QString format = "%1 => %2";\r
74     if ((flags & BlockParameter::NoComma) == 0) {\r
75       format.append(";");\r
76     }\r
77     AbstractBlock* parent = owner->getParent();\r
78     BlockParameter* p = NULL;\r
79     if (parent != NULL) {\r
80       p = parent->getParameterFromName(name);\r
81     }\r
82     if (p != NULL) {\r
83       /* the parent group has a generic parameter with the same\r
84            name\r
85         */\r
86       ret = format.arg(name).arg(name);\r
87     }\r
88     else {\r
89       if (!userValue.isNull()) {\r
90         ret = format.arg(name).arg(userValue.toString());\r
91       }\r
92       else if (!defaultValue.isNull()) {\r
93         ret = format.arg(name).arg(defaultValue.toString());\r
94       }\r
95       else {\r
96         // abnormal case\r
97         ret = format.arg(name).arg("INVALID_VALUE");\r
98       }\r
99     }\r
100   }\r
101   return ret;\r
102 }\r
103 \r