]> OCCT Git - occt.git/commitdiff
0025257: Expr should use names for comparing
authorpdn <pdn@opencascade.com>
Mon, 22 Sep 2014 15:47:04 +0000 (19:47 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 25 Sep 2014 11:58:29 +0000 (15:58 +0400)
Expression should use string names for comparing, fixed

src/Expr/Expr_NamedExpression.cxx
src/Expr/Expr_NamedUnknown.cxx

index de5769d0e10adaf6e4c559933c911752b54277b4..a398b41227b404135240d53b588545b7fcff635e 100644 (file)
 
 #include <Expr_NamedExpression.ixx>
 
+//=======================================================================
+//function : GetName
+//purpose  : 
+//=======================================================================
+
 const TCollection_AsciiString& Expr_NamedExpression::GetName() const
 {
   return myName;
 }
 
+//=======================================================================
+//function : SetName
+//purpose  : 
+//=======================================================================
+
 void Expr_NamedExpression::SetName(const TCollection_AsciiString& name)
 {
   myName = name;
 }
 
+//=======================================================================
+//function : IsShareable
+//purpose  : 
+//=======================================================================
+
 Standard_Boolean Expr_NamedExpression::IsShareable () const
 {
   return Standard_True;
 }
 
-Standard_Boolean Expr_NamedExpression::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
+//=======================================================================
+//function : IsIdentical
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Expr_NamedExpression::IsIdentical
+                        (const Handle(Expr_GeneralExpression)& theOther) const
 {
-  if (!Other->IsKind(STANDARD_TYPE(Expr_NamedExpression))) {
-    return Standard_False;
+  Standard_Boolean aResult(Standard_False);
+  if (theOther->IsKind(STANDARD_TYPE(Expr_NamedExpression))) {
+//  Handle(Expr_NamedExpression) me = this;
+//  Handle(Expr_NamedExpression) NEOther = Handle(Expr_NamedExpression)::DownCast(Other);
+//  return  (me == NEOther);
+
+//AGV 22.03.12: Comparison should be based on names rather than Handles
+    const Expr_NamedExpression* pOther =
+      static_cast<const Expr_NamedExpression*>(theOther.operator->());
+    if (pOther == this || pOther->GetName().IsEqual(myName))
+      aResult = Standard_True;
   }
-  Handle(Expr_NamedExpression) me = this;
-  Handle(Expr_NamedExpression) NEOther = Handle(Expr_NamedExpression)::DownCast(Other);
-  return  (me == NEOther);
+  return aResult;
 }
 
 TCollection_AsciiString Expr_NamedExpression::String() const
index bbca0e5f805384e56918efcfe5f95faa6182d844..dead2e03a25c3108d7e79dda52a8c8e157b9dca7 100644 (file)
@@ -92,10 +92,16 @@ Standard_Boolean Expr_NamedUnknown::ContainsUnknowns () const
   }
 }
 
-Standard_Boolean Expr_NamedUnknown::Contains (const Handle(Expr_GeneralExpression)& exp) const
+Standard_Boolean Expr_NamedUnknown::Contains
+                        (const Handle(Expr_GeneralExpression)& exp) const
 {
   if (!IsAssigned()) {
-    return Standard_False;
+    const Handle(Expr_NamedUnknown) expNamed =
+      Handle(Expr_NamedUnknown)::DownCast(exp);
+    if (expNamed.IsNull() || expNamed->IsAssigned())
+      return Standard_False;
+    //AGV 22.03.12: Comparison based on name coincidence
+    return IsIdentical(expNamed);
   }
   if (myExpression == exp) {
     return Standard_True;