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

Private GIT Repository
modifying pattern methods to throw exceptions
[blast.git] / AbstractBlock.cpp
index c71b2e0c508e46719659e2e15ba8982a69cdaf66..66c8f37a13c208a0646f7043fd120590351af2b5 100644 (file)
@@ -51,11 +51,12 @@ bool AbstractBlock::isTopGroupBlock() {
 bool AbstractBlock::isSourceBlock() {\r
   return false;\r
 }\r
-\r
+/* NB: a generator is a block that has no data inputs\r
+ * and has at least one data output.\r
+ */\r
 bool AbstractBlock::isGeneratorBlock() {\r
-  foreach(AbstractInterface* iface, inputs) {\r
-    if (iface->getPurpose() == AbstractInterface::Data) return false;\r
-  }\r
+  if (getDataInputs().size() > 0) return false;\r
+  \r
   return true;\r
 }\r
 \r
@@ -126,42 +127,58 @@ void AbstractBlock::defineBlockParam(BlockParameter *param)
   param->setValue(value);  \r
 }\r
 \r
-QList<AbstractInterface *> AbstractBlock::getInterfaces() {\r
+QList<AbstractInterface *> AbstractBlock::getInterfaces(int direction, int purpose) {\r
   QList<AbstractInterface *> list;\r
-  list.append(inputs);\r
-  list.append(outputs);\r
-  list.append(bidirs);\r
+  bool selIn = false;\r
+  bool selOut = false;\r
+  bool selInOut = false;\r
+  \r
+  if (direction == AbstractInterface::AnyDirection) {\r
+    selIn = true;\r
+    selOut = true;\r
+    selInOut = true;\r
+  }\r
+  else if (direction == AbstractInterface::Input) {\r
+    selIn = true;    \r
+  }\r
+  else if (direction == AbstractInterface::Output) {\r
+    selOut = true;    \r
+  }\r
+  else if (direction == AbstractInterface::InOut) {\r
+    selInOut = true;    \r
+  }\r
+  if (selIn) {\r
+    foreach(AbstractInterface* iface, inputs) {\r
+      if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface);      \r
+    }\r
+  }\r
+  if (selOut) {\r
+    foreach(AbstractInterface* iface, outputs) {\r
+      if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface);      \r
+    }\r
+  }\r
+  if (selInOut) {\r
+    foreach(AbstractInterface* iface, bidirs) {\r
+      if ((iface->getPurpose() == purpose) || (purpose == AbstractInterface::AnyPurpose)) list.append(iface);      \r
+    }\r
+  }\r
   return list;\r
 }\r
 \r
 QList<AbstractInterface *> AbstractBlock::getDataInputs() {\r
-  QList<AbstractInterface *> list;\r
-  foreach(AbstractInterface* iface, inputs) {\r
-    if (iface->getPurpose() == AbstractInterface::Data) {\r
-      list.append(iface);\r
-    }\r
-  }\r
-  return list;\r
+  return getInterfaces(AbstractInterface::Input, AbstractInterface::Data);  \r
+}\r
+\r
+QList<AbstractInterface *> AbstractBlock::getDataOutputs() {\r
+  return getInterfaces(AbstractInterface::Output, AbstractInterface::Data);  \r
 }\r
 \r
 QList<AbstractInterface *> AbstractBlock::getControlInputs() {\r
-  QList<AbstractInterface *> list;\r
-  foreach(AbstractInterface* iface, inputs) {\r
-    if (iface->getPurpose() == AbstractInterface::Control) {\r
-      list.append(iface);\r
-    }\r
-  }\r
-  return list;\r
+  return getInterfaces(AbstractInterface::Input, AbstractInterface::Control);  \r
 }\r
 \r
 QList<AbstractInterface *> AbstractBlock::getControlOutputs() {\r
-  QList<AbstractInterface *> list;\r
-  foreach(AbstractInterface* iface, outputs) {\r
-    if (iface->getPurpose() == AbstractInterface::Control) {\r
-      list.append(iface);\r
-    }\r
-  }\r
-  return list;\r
+  return getInterfaces(AbstractInterface::Output, AbstractInterface::Control);    \r
 }\r
 \r
 AbstractInterface* AbstractBlock::getIfaceFromName(QString name) {\r