]> SALOME platform Git repositories - modules/superv.git/commitdiff
Salome HOME
Methods moved here
authorrahuel <rahuel@opencascade.com>
Tue, 30 Aug 2005 06:44:34 +0000 (06:44 +0000)
committerrahuel <rahuel@opencascade.com>
Tue, 30 Aug 2005 06:44:34 +0000 (06:44 +0000)
src/GraphBase/DataFlowBase_StreamNode.cxx
src/GraphBase/DataFlowBase_StreamNode.hxx

index fb0a7a150fb0bbc85b44462528c48069f2c92bc7..fcef9484cdb9b5807c16657ac070b32d1cb84a04 100644 (file)
@@ -11,6 +11,7 @@
 
 using namespace std;
 
+#include "DataFlowBase_Graph.hxx"
 #include "DataFlowBase_StreamNode.hxx"
 
 GraphBase::StreamNode::StreamNode() :
@@ -66,15 +67,44 @@ GraphBase::StreamNode::~StreamNode() {
 }
 
 bool GraphBase::StreamNode::Name( const char * aName) {
-  cdebug_in << "GraphBase::StreamNode::Name " << _Name << endl;
-  if ( _Name ) {
+  bool RetVal ;
+  char * aGraphName = "" ;
+  bool aNodeWithThatName ;
+  if ( IsDataFlowNode() || IsDataStreamNode() ) {
+    aGraphName = Name() ;
+    aNodeWithThatName = ((GraphBase::Graph * ) this)->GetGraphNode( aName ) ;
+  }
+  else if ( GraphOfNode() ) {
+    aGraphName = GraphOfNode()->Name() ;
+    aNodeWithThatName = GraphOfNode()->GetGraphNode( aName ) ;
+  }
+  cdebug_in << "GraphBase::StreamNode::Name from '" << _Name << "' to '" << aName
+            << "' in Graph '" << aGraphName << "' IsGraph "
+            << ( IsDataFlowNode() || IsDataStreamNode() ) << endl ;
+  if ( strcmp( aName , aGraphName ) && !aNodeWithThatName ) {
     cdebug << "GraphBase::StreamNode::ReName "  << _Name << " --> " << aName << endl ;
-    delete [] _Name ;
+    if ( _Name ) {
+      delete [] _Name ;
+    }
+    _Name = new char[strlen(aName)+1] ;
+    strcpy( _Name , aName ) ;
+    RetVal = true ;
+  }
+  else {
+    if ( !strcmp( aName , Name() ) ) {
+//ReName of the graph with the same name :
+      cdebug << "GraphBase::StreamNode::ReName '" << Name() << "' to '" << aName
+             << "' with same name" << endl ;
+      RetVal = true ;
+    }
+    else {
+      cdebug << "GraphBase::StreamNode::ReName ERROR '" << Name() << "' to '" << aName
+             << "' already exists" << endl ;
+      RetVal = false ;
+    }
   }
-  _Name = new char[strlen(aName)+1] ;
-  strcpy( _Name , aName ) ;
-  cdebug_out << "GraphBase::StreamNode::Name " << _Name << endl;
-  return true ;
+  cdebug_out << "GraphBase::StreamNode::Name " << aName << " " << RetVal << endl;
+  return RetVal ;
 }
 
 void GraphBase::StreamNode::SetSubStreamGraph( int SubStreamGraphsNumber , int & RetVal ) {
@@ -125,7 +155,9 @@ void GraphBase::StreamNode::AddLinkedNode( GraphBase::StreamNode * ToNode ) {
     _LinkedNodes.resize( _LinkedNodesSize+1 ) ;
     _LinkedInPortsNumber.resize( _LinkedNodesSize+1 ) ;
     _LinkedNodes[ _LinkedNodesSize ] = ToNode ;
-    _LinkedInPortsNumber[ _LinkedNodesSize ] = 1 ;
+    _LinkedInPortsNumber[ _LinkedNodesSize ] = 0 ;
+    IncrLinkedInPortsNumber( _LinkedNodesSize ) ;
+//    _LinkedInPortsNumber[ _LinkedNodesSize ] = 1 ;
     SetLinkedNodeIndex( ToNode->Name() , _LinkedNodesSize ) ;
     index = _LinkedNodesSize ;
     _LinkedNodesSize++ ;
@@ -133,7 +165,8 @@ void GraphBase::StreamNode::AddLinkedNode( GraphBase::StreamNode * ToNode ) {
   else {
     cdebug << Name() << "->GraphBase::StreamNode::AddLinkedNode( " << ToNode->Name()
            << " ) old LinkedNode " << _LinkedNodes[index ]->Name() << endl ;
-    _LinkedInPortsNumber[ index ] += 1 ;
+    IncrLinkedInPortsNumber( index ) ;
+//    _LinkedInPortsNumber[ index ] += 1 ;
   }
   cdebug << Name() << "->GraphBase::StreamNode::AddLinkedNode( " << ToNode->Name()
          << " ) LinkedNodesSize " << _LinkedNodesSize << " [ " << index
@@ -146,7 +179,9 @@ void GraphBase::StreamNode::AddLinkedNode( GraphBase::StreamNode * ToNode ) {
     ToNode->_LinkedFromNodes.resize( ToNode->_LinkedFromNodesSize+1 ) ;
     ToNode->_LinkedFromInPortsNumber.resize( ToNode->_LinkedFromNodesSize+1 ) ;
     ToNode->_LinkedFromNodes[ ToNode->_LinkedFromNodesSize ] = this ;
-    ToNode->_LinkedFromInPortsNumber[ ToNode->_LinkedFromNodesSize ] = 1 ;
+    ToNode->_LinkedFromInPortsNumber[ ToNode->_LinkedFromNodesSize ] = 0 ;
+    ToNode->IncrLinkedFromInPortsNumber( ToNode->_LinkedFromNodesSize ) ;
+//    ToNode->_LinkedFromInPortsNumber[ ToNode->_LinkedFromNodesSize ] = 1 ;
     ToNode->SetLinkedFromNodeIndex( Name() , ToNode->_LinkedFromNodesSize ) ;
     index = ToNode->_LinkedFromNodesSize ;
     ToNode->_LinkedFromNodesSize++ ;
@@ -154,7 +189,8 @@ void GraphBase::StreamNode::AddLinkedNode( GraphBase::StreamNode * ToNode ) {
   else {
     cdebug << Name() << "->GraphBase::StreamNode::AddLinkedFromNode( " << ToNode->Name()
            << " ) old LinkedFromNode " << ToNode->_LinkedFromNodes[index ]->Name() << endl ;
-    ToNode->_LinkedFromInPortsNumber[ index ] += 1 ;
+    ToNode->IncrLinkedFromInPortsNumber( index ) ;
+//    ToNode->_LinkedFromInPortsNumber[ index ] += 1 ;
   }
   cdebug << ToNode->Name() << "->GraphBase::StreamNode::AddLinkedFromNode( " << Name()
          << " ) LinkedFromNodesSize " << ToNode->_LinkedFromNodesSize << " [ " << index
@@ -195,9 +231,10 @@ bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ,
   }
   if ( index >= 0 ) {
     cdebug << "GraphBase::StreamNode::RemoveLinkedNode to " << ToNode->Name() << " from "
-           << Name() << " index : " << index << " LinkedInPortsNumber "
+           << Name() << " index : " << index << " " << ToNode->Name() << "->LinkedInPortsNumber "
            << _LinkedInPortsNumber[ index ] << " - 1" << endl ;
-    _LinkedInPortsNumber[ index ] -= 1 ;
+    DecrLinkedInPortsNumber( index ) ;
+//    _LinkedInPortsNumber[ index ] -= 1 ;
     if ( _LinkedInPortsNumber[ index ] == 0 ) {
       _LinkedNodesSize-- ;
       cdebug << "GraphBase::StreamNode::RemoveLinkedNode new LinkedNodesSize "
@@ -213,6 +250,10 @@ bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ,
       _LinkedNodes.resize( _LinkedNodesSize+1 ) ;
       _LinkedInPortsNumber.resize( _LinkedNodesSize+1 ) ;
     }
+    else {
+      cdebug << "StreamNode::RemoveLinkedNode to " << ToNode->Name() << " from "
+             << Name() << " " << ToNode->Name() << "->LinkedInPortsNumber # 0 " << endl ;
+    }
   }
   else {
     cdebug << "StreamNode::RemoveLinkedNode index Error " << ToNode->Name() << " <-- " << Name() << " : " << index
@@ -220,16 +261,21 @@ bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ,
   }
   int fromindex = 0 ;
   fromindex = -1 ;
-  if ( ToNode->_LinkedFromNodesSize ) {
+  if ( ToNode->LinkedFromNodesSize() ) {
+//  if ( ToNode->_LinkedFromNodesSize ) {
     fromindex = ToNode->GetLinkedFromNodeIndex( Name() ) ;
   }
   if ( fromindex >= 0 ) {
     cdebug << "GraphBase::StreamNode::RemoveLinkedFromNode from " << ToNode->Name() << " to "
-           << Name() << " index : " << fromindex << " LinkedFromInPortsNumber "
+           << Name() << " index : " << fromindex << " " << ToNode->Name()
+           << "->LinkedFromInPortsNumber "
            << ToNode->_LinkedFromInPortsNumber[ fromindex ] << " - 1" << endl ;
-    ToNode->_LinkedFromInPortsNumber[ fromindex ] -= 1 ;
-    if ( ToNode->_LinkedFromInPortsNumber[ fromindex ] == 0 ) {
-      ToNode->_LinkedFromNodesSize-- ;
+//    ToNode->_LinkedFromInPortsNumber[ fromindex ] -= 1 ;
+    ToNode->DecrLinkedFromInPortsNumber( fromindex ) ;
+    if ( ToNode->LinkedFromInPortsNumber( fromindex ) == 0 ) {
+//    if ( ToNode->_LinkedFromInPortsNumber[ fromindex ] == 0 ) {
+      ToNode->DecrLinkedFromNodesSize() ;
+//      ToNode->_LinkedFromNodesSize-- ;
       cdebug << "GraphBase::StreamNode::RemoveLinkedFromNode new LinkedFromNodesSize "
              << ToNode->_LinkedFromNodesSize << " " << Name() << " removed from "
              << " linkedFromnodes of " << ToNode->Name() << endl ;
@@ -247,6 +293,11 @@ bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ,
       ToNode->_LinkedFromNodes.resize( ToNode->_LinkedFromNodesSize+1 ) ;
       ToNode->_LinkedFromInPortsNumber.resize( ToNode->_LinkedFromNodesSize+1 ) ;
     }
+    else {
+      cdebug << "StreamNode::RemoveLinkedFromNode from " << ToNode->Name()
+             << "->LinkedFromInPortsNumber "
+             << ToNode->_LinkedFromInPortsNumber[ fromindex ] << " # 0" << endl ;
+    }
   }
   else if ( DoLinkedFromNode ) {
     cdebug << "StreamNode::RemoveLinkedFromNode index Error " << ToNode->Name() << " --> "
index 63398c76893714cab6a68cfae0f287f76fa51b70..2f2270cf8b0e555a341adab6f775ea0362e2a925 100644 (file)
@@ -158,18 +158,49 @@ namespace GraphBase {
       int LinkedNodesSize() const { return _LinkedNodesSize ; } ;
 
       const int LinkedInPortsNumber( int i ) const { return _LinkedInPortsNumber[ i ] ; } ;
+      void IncrLinkedInPortsNumber( int i ) {
+           cdebug << Name() << "->IncrLinkedInPortsNumber LinkedInPortsNumber --> "
+                  << _LinkedInPortsNumber[ i ] + 1 << endl ;
+           _LinkedInPortsNumber[ i ]++ ; } ;
+      void DecrLinkedInPortsNumber( int i ) {
+           cdebug << Name() << "->DecrLinkedInPortsNumber LinkedInPortsNumber --> "
+                  << _LinkedInPortsNumber[ i ] - 1 << endl ;
+           _LinkedInPortsNumber[ i ]-- ; } ;
 
       StreamNode * LinkedNodes( int i ) const { return _LinkedNodes[ i ] ; } ;
 
       int GetLinkedFromNodeIndex( const char * name ) {
           int index = _MapOfLinkedFromNodes[ name ] -1 ;
           if ( index >= 0 ) {
-            cdebug << "GetLinkedFromNodeIndex of " << name
+            cdebug << "StreamNode::GetLinkedFromNodeIndex of " << name
                    << " in _MapOfLinkedFromNodes : "
                    << index << " FromNode " << hex << (void *) _LinkedFromNodes[ index ]
                    << dec << " '" << _LinkedFromNodes[ index ]->Name() << "'"
                    << endl ;
          }
+          else {
+            cdebug << "StreamNode::GetLinkedFromNodeIndex of " << name
+                   << " in _MapOfLinkedFromNodes not found. Known nodes :" << endl ;
+#if 0
+            map< string , int >::iterator aMapOfLinkedFromNodesIterator1 ;
+            int iifrom = 0 ;
+            for ( aMapOfLinkedFromNodesIterator1 = ToNode->_MapOfLinkedFromNodes.begin() ;
+                  aMapOfLinkedFromNodesIterator1 != ToNode->_MapOfLinkedFromNodes.end() &&
+                  iifrom < ToNode->_LinkedFromNodesSize ; aMapOfLinkedFromNodesIterator1++ ) {
+              if ( aMapOfLinkedFromNodesIterator1->second ) {
+                cdebug << "_MapOfLinkedFromNodes" << iifrom++ << " of " << ToNode->Name() << " : "
+                       << aMapOfLinkedFromNodesIterator1->first << " --> "
+                       << aMapOfLinkedFromNodesIterator1->second << " "
+                       << ToNode->_LinkedFromNodes[ aMapOfLinkedFromNodesIterator1->second - 1 ]->Name()
+                       << endl ;
+              }
+              else {
+                cdebug << "_MapOfLinkedFromNodes" << iifrom << " of " << ToNode->Name() << " : "
+                       << aMapOfLinkedFromNodesIterator1->second - 1 << endl ;
+             }
+           }
+#endif
+         }
           return index ; } ;
       void SetLinkedFromNodeIndex( const char * name , const int index ) {
           _MapOfLinkedFromNodes[ name ] = index +1 ;
@@ -183,9 +214,21 @@ namespace GraphBase {
       void DelLinkedFromNodeIndex( const char * name ) {
            _MapOfLinkedFromNodes.erase( name ) ; } ;
 
-      int LinkedFromNodesSize() const { return _LinkedFromNodesSize ; } ;
-
-      const int LinkedFromInPortsNumber( int i ) const { return _LinkedFromInPortsNumber[ i ] ; } ;
+      int LinkedFromNodesSize() const {
+          return _LinkedFromNodesSize ; } ;
+      void DecrLinkedFromNodesSize() {
+           _LinkedFromNodesSize-- ; } ;
+
+      const int LinkedFromInPortsNumber( int i ) const {
+            return _LinkedFromInPortsNumber[ i ] ; } ;
+      void IncrLinkedFromInPortsNumber( int i ) {
+           cdebug << Name() << "->IncrLinkedFromInPortsNumber LinkedFromInPortsNumber --> "
+                  << _LinkedFromInPortsNumber[ i ] + 1 << endl ;
+           _LinkedFromInPortsNumber[ i ]++ ; } ;
+      void DecrLinkedFromInPortsNumber( int i ) {
+           cdebug << Name() << "->DecrLinkedFromInPortsNumber LinkedFromInPortsNumber --> "
+                  << _LinkedFromInPortsNumber[ i ] - 1 << endl ;
+           _LinkedFromInPortsNumber[ i ]-- ; } ;
 
       StreamNode * LinkedFromNodes( int i ) const { return _LinkedFromNodes[ i ] ; } ;
 
@@ -212,9 +255,11 @@ namespace GraphBase {
 
       int LinkedStreamNodesSize() const { return _LinkedStreamNodesSize ; } ;
 
-      const int LinkedInStreamPortsNumber( int i ) const { return _LinkedInStreamPortsNumber[ i ] ; } ;
+      const int LinkedInStreamPortsNumber( int i ) const {
+            return _LinkedInStreamPortsNumber[ i ] ; } ;
 
-      StreamNode * LinkedStreamNodes( int i ) const { return _LinkedStreamNodes[ i ] ; } ;
+      StreamNode * LinkedStreamNodes( int i ) const {
+                   return _LinkedStreamNodes[ i ] ; } ;
 
       bool BranchOfSwitchDone( bool aNodeDoneInBranchOfSwitch ) {
            bool prevalue = _NodeDoneInBranchOfSwitch ;