]> SALOME platform Git repositories - modules/yacs.git/blobdiff - src/engine/AbstractPoint.cxx
Salome HOME
[EDF20032] : Algorithm is less strict to support new configuration
[modules/yacs.git] / src / engine / AbstractPoint.cxx
index 91ce4c24654a66ae5cbe6b802fc93e7e88afd938..fc4168465edf3a4aa843d9cdd385c896b6fc9d84 100644 (file)
@@ -75,6 +75,12 @@ bool AbstractPoint::isSimplyLinkedBeforeNullAfter(BlocPoint *sop)
   return IsNoLinksAfter(endd) && isSimplyLinkedBefore(sop,beg);
 }
 
+bool AbstractPoint::isNullBeforeNullAfter(BlocPoint *sop)
+{
+  Node *beg(getFirstNode()),*endd(getLastNode());
+  return IsNoLinksBefore(beg) && IsNoLinksAfter(endd);
+}
+
 /*!
  * precondition : isSimplyLinkedBeforeAfter must return true on \a this.
  */
@@ -223,6 +229,35 @@ ForkBlocPoint *AbstractPoint::tryAsForkTer(BlocPoint *sop)
     return nullptr;
 }
 
+ForkBlocPoint *AbstractPoint::tryAsForkQuatro(BlocPoint *sop)
+{
+  Node *bb(GetNodeB4(getFirstNode())),*ee(GetNodeAfter(getLastNode()));
+  AbstractPoint *bb2(sop->findPointWithNode(bb));
+  //
+  const std::list<AbstractPoint *>& lp(sop->getListOfPoints());
+  std::list<AbstractPoint *> l; l.push_back(this);
+  for(std::list<AbstractPoint *>::const_iterator it=lp.begin();it!=lp.end();it++)
+    {
+      if(*it==this)
+        continue;
+      if(dynamic_cast<NotSimpleCasePoint *>(*it))
+        continue;
+      Node *curFirst((*it)->getFirstNode()),*curEnd((*it)->getLastNode());
+      if(!IsNoLinksBefore(curFirst) || !IsNoLinksAfter(curEnd))
+        continue;
+      Node *curbb(GetNodeB4(curFirst));
+      AbstractPoint *bb3(sop->findPointWithNode(curbb));
+      if(bb2==bb3)
+        l.push_back(*it);
+    }
+  if(l.size()>1)
+    {
+      return new ForkBlocPoint(l,getFather());
+    }
+  else
+    return nullptr;
+}
+
 #include <iostream>
 
 class Visitor1 : public YACS::ENGINE::PointVisitor