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

Private GIT Repository
start to include clkdomain converters
[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     QString typeStr = "";\r
63     QString valueStr = "";\r
64     if ((type == Boolean)||(type == Bit)) {\r
65       typeStr = "std_logic";\r
66       if (!userValue.isNull()) {\r
67         valueStr = "'"+userValue.toString()+"'";\r
68         ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
69       }\r
70       else if (!defaultValue.isNull()) {\r
71         valueStr = "'"+defaultValue.toString()+"'";\r
72         ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
73       }\r
74       else {\r
75         ret = formatNoValue.arg(name).arg(typeStr);\r
76       }\r
77     }\r
78     else {\r
79       typeStr = getTypeString();\r
80       if (!userValue.isNull()) {\r
81         ret = formatValue.arg(name).arg(typeStr).arg(userValue.toString());\r
82       }\r
83       else if (!defaultValue.isNull()) {\r
84         ret = formatValue.arg(name).arg(typeStr).arg(defaultValue.toString());\r
85       }\r
86       else {\r
87         ret = formatNoValue.arg(name).arg(typeStr);\r
88       }\r
89     }\r
90   }\r
91   else if (context == BlockParameter::Instance) {\r
92     QString format = "%1 => %2";\r
93     if ((flags & BlockParameter::NoComma) == 0) {\r
94       format.append(";");\r
95     }\r
96     AbstractBlock* parent = owner->getParent();\r
97     BlockParameter* p = NULL;\r
98     if (parent != NULL) {\r
99       p = parent->getParameterFromName(name);\r
100     }\r
101     if (p != NULL) {\r
102       /* the parent group has a generic parameter with the same\r
103            name\r
104         */\r
105       ret = format.arg(name).arg(name);\r
106     }\r
107     else {\r
108       if (!userValue.isNull()) {\r
109         if ((type == Boolean)||(type == Bit)) {\r
110           ret = format.arg(name).arg("'"+userValue.toString()+"'");\r
111         }\r
112         else {\r
113           ret = format.arg(name).arg(userValue.toString());\r
114         }\r
115       }\r
116       else if (!defaultValue.isNull()) {\r
117         if ((type == Boolean)||(type == Bit)) {\r
118           ret = format.arg(name).arg("'"+defaultValue.toString()+"'");\r
119         }\r
120         else {\r
121           ret = format.arg(name).arg(defaultValue.toString());\r
122         }\r
123       }\r
124       else {\r
125         // abnormal case\r
126         ret = format.arg(name).arg("INVALID_VALUE");\r
127       }\r
128     }\r
129   }\r
130   return ret;\r
131 }\r
132 \r