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

Private GIT Repository
added patterns and started OP computation
[blast.git] / AbstractBlock.cpp
1 #include <AbstractBlock.h>\r
2 #include <QInputDialog>\r
3 #include <QMessageBox>\r
4 #include "AbstractInterface.h"\r
5 #include "BlockParameter.h"\r
6 \r
7 AbstractBlock::AbstractBlock() {\r
8   name = "";\r
9   parent = NULL;\r
10 }\r
11 \r
12 AbstractBlock::AbstractBlock(const QString& _name) {\r
13   name = _name;\r
14   parent = NULL;\r
15 }\r
16 \r
17 AbstractBlock::~AbstractBlock() {\r
18 \r
19   removeAllInterfaces();\r
20 \r
21   foreach(BlockParameter* p, params) {\r
22     delete p;\r
23   }\r
24   params.clear();\r
25 }\r
26 \r
27 void AbstractBlock::setName(const QString& str) {\r
28   name = str;\r
29 }\r
30 \r
31 void AbstractBlock::setParent(AbstractBlock* _parent) {\r
32   parent = _parent;\r
33 }\r
34 \r
35 bool AbstractBlock::isReferenceBlock() {\r
36   return false;\r
37 }\r
38 \r
39 bool AbstractBlock::isFunctionalBlock() {\r
40   return false;\r
41 }\r
42 \r
43 bool AbstractBlock::isGroupBlock() {\r
44   return false;\r
45 }\r
46 \r
47 bool AbstractBlock::isTopGroupBlock() {  \r
48   return false;\r
49 }\r
50 \r
51 bool AbstractBlock::isSourceBlock() {\r
52   return false;\r
53 }\r
54 \r
55 bool AbstractBlock::isGeneratorBlock() {\r
56   foreach(AbstractInterface* iface, inputs) {\r
57     if (iface->getPurpose() == AbstractInterface::Data) return false;\r
58   }\r
59   return true;\r
60 }\r
61 \r
62 void AbstractBlock::addParameter(BlockParameter *param) {\r
63   params.append(param);\r
64 }\r
65 \r
66 \r
67 BlockParameter* AbstractBlock::getParameterFromName(QString name) {\r
68   foreach(BlockParameter* p, params) {\r
69     if (p->getName() == name) return p;\r
70   }\r
71   return NULL;\r
72 }\r
73 \r
74 void AbstractBlock::addInterface(AbstractInterface *inter) {\r
75   if(inter->getDirection() == AbstractInterface::Input){\r
76     inputs.append(inter);\r
77   } else if(inter->getDirection() == AbstractInterface::Output){\r
78     outputs.append(inter);\r
79   } else if(inter->getDirection() == AbstractInterface::InOut){\r
80     bidirs.append(inter);\r
81   }\r
82 }\r
83 \r
84 void AbstractBlock::removeInterface(AbstractInterface *inter) {\r
85   /* CAUTION: no check is done about the connection state of this interface\r
86      Thus, if it is still connected to/from, there will be a crash\r
87    */\r
88   if(inter->getDirection() == AbstractInterface::Input){\r
89     inputs.removeAll(inter);\r
90   } else if(inter->getDirection() == AbstractInterface::Output){\r
91     outputs.removeAll(inter);\r
92   } else if(inter->getDirection() == AbstractInterface::InOut){\r
93     bidirs.removeAll(inter);\r
94   }\r
95   delete inter;\r
96 }\r
97 \r
98 void AbstractBlock::removeAllInterfaces() {\r
99 \r
100   foreach(AbstractInterface* iface, inputs) {\r
101     delete iface;\r
102   }\r
103   foreach(AbstractInterface* iface, outputs) {\r
104     delete iface;\r
105   }\r
106   foreach(AbstractInterface* iface, bidirs) {\r
107     delete iface;\r
108   }\r
109   inputs.clear();\r
110   outputs.clear();\r
111   bidirs.clear();\r
112 \r
113 }\r
114 \r
115 void AbstractBlock::defineBlockParam(BlockParameter *param)\r
116 {\r
117   cout << "definition of param : " << param->getName().toStdString() << endl;\r
118   bool ok = false;\r
119   QString value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + "?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
120 \r
121   while (!ok && value.isEmpty())\r
122   {\r
123     QMessageBox::critical(NULL, "Error", "You have to insert a value for the parameter or accept the default value !");\r
124     value = QInputDialog::getText(NULL, "Block parameter", "value for the "+ param->getName() +" parameter of " + param->getOwner()->getName() + " ?", QLineEdit::Normal, param->getValue().toString(), &ok);\r
125   }\r
126   param->setValue(value);  \r
127 }\r
128 \r
129 QList<AbstractInterface *> AbstractBlock::getInterfaces() {\r
130   QList<AbstractInterface *> list;\r
131   list.append(inputs);\r
132   list.append(outputs);\r
133   list.append(bidirs);\r
134   return list;\r
135 }\r
136 \r
137 QList<AbstractInterface *> AbstractBlock::getDataInputs() {\r
138   QList<AbstractInterface *> list;\r
139   foreach(AbstractInterface* iface, inputs) {\r
140     if (iface->getPurpose() == AbstractInterface::Data) {\r
141       list.append(iface);\r
142     }\r
143   }\r
144   return list;\r
145 }\r
146 \r
147 QList<AbstractInterface *> AbstractBlock::getControlInputs() {\r
148   QList<AbstractInterface *> list;\r
149   foreach(AbstractInterface* iface, inputs) {\r
150     if (iface->getPurpose() == AbstractInterface::Control) {\r
151       list.append(iface);\r
152     }\r
153   }\r
154   return list;\r
155 }\r
156 \r
157 QList<AbstractInterface *> AbstractBlock::getControlOutputs() {\r
158   QList<AbstractInterface *> list;\r
159   foreach(AbstractInterface* iface, outputs) {\r
160     if (iface->getPurpose() == AbstractInterface::Control) {\r
161       list.append(iface);\r
162     }\r
163   }\r
164   return list;\r
165 }\r
166 \r
167 AbstractInterface* AbstractBlock::getIfaceFromName(QString name) {\r
168 \r
169   foreach(AbstractInterface* iface, inputs) {\r
170     if (iface->getName() == name) return iface;\r
171   }\r
172   foreach(AbstractInterface* iface, outputs) {\r
173     if (iface->getName() == name) return iface;\r
174   }\r
175   foreach(AbstractInterface* iface, bidirs) {\r
176     if (iface->getName() == name) return iface;\r
177   }\r
178   return NULL;\r
179 }\r
180 \r
181 bool AbstractBlock::isWBConfigurable() {\r
182 \r
183   foreach(BlockParameter* p, params) {\r
184     if (p->isWishboneParameter()) return true;\r
185   }\r
186   return false;\r
187 }\r
188 \r
189 QList<BlockParameter *> AbstractBlock::getUserParameters() {\r
190   QList<BlockParameter *> lst;\r
191   foreach(BlockParameter* p, params) {\r
192     if (p->isUserParameter()) lst.append(p);\r
193   }\r
194   return lst;\r
195 }\r
196 \r
197 QList<BlockParameter *> AbstractBlock::getGenericParameters() {\r
198   QList<BlockParameter *> lst;\r
199   foreach(BlockParameter* p, params) {\r
200     if (p->isGenericParameter()) lst.append(p);\r
201   }\r
202   return lst;\r
203 }\r
204 \r
205 QList<BlockParameter *> AbstractBlock::getPortParameters() {\r
206   QList<BlockParameter *> lst;\r
207   foreach(BlockParameter* p, params) {\r
208     if (p->isPortParameter()) lst.append(p);\r
209   }\r
210   return lst;\r
211 }\r
212 \r
213 QList<BlockParameter *> AbstractBlock::getWishboneParameters() {\r
214   QList<BlockParameter *> lst;\r
215   foreach(BlockParameter* p, params) {\r
216     if (p->isWishboneParameter()) lst.append(p);\r
217   }\r
218   return lst;\r
219 }\r