_Name = NULL ;
_Kind = SUPERV::UnknownNode ;
_LinkedNodesSize = 0 ;
+ _LinkedFromNodesSize = 0 ;
_LinkedStreamNodesSize = 0 ;
_HeadNode = false ;
_LevelNumber = -1 ;
}
Kind( DataFlowkind ) ;
_LinkedNodesSize = 0 ;
+ _LinkedFromNodesSize = 0 ;
_LinkedStreamNodesSize = 0 ;
_HeadNode = false ;
_LevelNumber = -1 ;
cdebug << Name() << "->GraphBase::StreamNode::AddLinkedNode( " << ToNode->Name()
<< " ) LinkedNodesSize " << _LinkedNodesSize << " [ " << index
<< " ] _LinkedInPortsNumber " << _LinkedInPortsNumber[ index ] << endl ;
+
+ index = ToNode->GetLinkedFromNodeIndex( Name() ) ;
+ if ( index < 0 ) {
+ cdebug << ToNode->Name() << "<-GraphBase::StreamNode::AddLinkedFromNode( " << Name()
+ << " ) new LinkedFromNode " << endl ;
+ ToNode->_LinkedFromNodes.resize( ToNode->_LinkedFromNodesSize+1 ) ;
+ ToNode->_LinkedFromInPortsNumber.resize( ToNode->_LinkedFromNodesSize+1 ) ;
+ ToNode->_LinkedFromNodes[ ToNode->_LinkedFromNodesSize ] = this ;
+ ToNode->_LinkedFromInPortsNumber[ ToNode->_LinkedFromNodesSize ] = 1 ;
+ ToNode->SetLinkedFromNodeIndex( Name() , ToNode->_LinkedFromNodesSize ) ;
+ index = ToNode->_LinkedFromNodesSize ;
+ ToNode->_LinkedFromNodesSize++ ;
+ }
+ else {
+ cdebug << Name() << "->GraphBase::StreamNode::AddLinkedFromNode( " << ToNode->Name()
+ << " ) old LinkedFromNode " << ToNode->_LinkedFromNodes[index ]->Name() << endl ;
+ ToNode->_LinkedFromInPortsNumber[ index ] += 1 ;
+ }
+ cdebug << ToNode->Name() << "->GraphBase::StreamNode::AddLinkedFromNode( " << Name()
+ << " ) LinkedFromNodesSize " << ToNode->_LinkedFromNodesSize << " [ " << index
+ << " ] _LinkedFromInPortsNumber " << ToNode->_LinkedFromInPortsNumber[ index ] << endl ;
}
-bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ) {
- int index = GetLinkedNodeIndex( ToNode->Name() ) ;
+bool GraphBase::StreamNode::RemoveLinkedNode( GraphBase::StreamNode * ToNode ,
+ bool DoLinkedFromNode ) {
+ cdebug_in << "StreamNode::RemoveLinkedNode between " << Name() << " LinkedNodesSize "
+ << LinkedNodesSize() << " and " << ToNode->Name() << " LinkedFromNodesSize "
+ << ToNode->LinkedFromNodesSize() << endl ;
+#if 1
+ map< string , int >::iterator aMapOfLinkedNodesIterator ;
+ int i = 0 ;
+ for ( aMapOfLinkedNodesIterator = _MapOfLinkedNodes.begin() ;
+ aMapOfLinkedNodesIterator != _MapOfLinkedNodes.end() && i < _LinkedNodesSize ;
+ aMapOfLinkedNodesIterator++ ) {
+ cdebug << "_MapOfLinkedNodes" << i++ << " of " << Name() << " : "
+ << aMapOfLinkedNodesIterator->first << " --> " << aMapOfLinkedNodesIterator->second
+ << endl ;
+ }
+#endif
+#if 1
+ map< string , int >::iterator aMapOfLinkedFromNodesIterator ;
+ int ifrom = 0 ;
+ for ( aMapOfLinkedFromNodesIterator = ToNode->_MapOfLinkedFromNodes.begin() ;
+ aMapOfLinkedFromNodesIterator != ToNode->_MapOfLinkedFromNodes.end() &&
+ ifrom < ToNode->_LinkedFromNodesSize ; aMapOfLinkedFromNodesIterator++ ) {
+ cdebug << "_MapOfLinkedFromNodes" << ifrom++ << " of " << ToNode->Name() << " : "
+ << aMapOfLinkedFromNodesIterator->first << " --> "
+ << aMapOfLinkedFromNodesIterator->second << endl ;
+ }
+#endif
+
+ int index = -1 ;
+ if ( _LinkedNodesSize ) {
+ index = GetLinkedNodeIndex( ToNode->Name() ) ;
+ }
if ( index >= 0 ) {
- cdebug << "GraphBase::StreamNode::RemoveLinkedNode( to " << ToNode->Name() << " from "
+ cdebug << "GraphBase::StreamNode::RemoveLinkedNode to " << ToNode->Name() << " from "
<< Name() << " index : " << index << " LinkedInPortsNumber "
<< _LinkedInPortsNumber[ index ] << " - 1" << endl ;
_LinkedInPortsNumber[ index ] -= 1 ;
}
}
else {
- cdebug << "StreamNode::RemoveLinkedNode index Error " << Name() << " --> " << ToNode->Name() << " : " << index
- << " _LinkedNodesSize " << _LinkedNodesSize << endl ;
+ cdebug << "StreamNode::RemoveLinkedNode index Error " << ToNode->Name() << " <-- " << Name() << " : " << index
+ << " _LinkedNodesSize " << ToNode->_LinkedNodesSize << endl ;
+ }
+ int fromindex = 0 ;
+ fromindex = -1 ;
+ if ( ToNode->_LinkedFromNodesSize ) {
+ fromindex = ToNode->GetLinkedFromNodeIndex( Name() ) ;
+ }
+ if ( fromindex >= 0 ) {
+ cdebug << "GraphBase::StreamNode::RemoveLinkedFromNode from " << ToNode->Name() << " to "
+ << Name() << " index : " << fromindex << " LinkedFromInPortsNumber "
+ << ToNode->_LinkedFromInPortsNumber[ fromindex ] << " - 1" << endl ;
+ ToNode->_LinkedFromInPortsNumber[ fromindex ] -= 1 ;
+ if ( ToNode->_LinkedFromInPortsNumber[ fromindex ] == 0 ) {
+ ToNode->_LinkedFromNodesSize-- ;
+ cdebug << "GraphBase::StreamNode::RemoveLinkedFromNode new LinkedFromNodesSize "
+ << ToNode->_LinkedFromNodesSize << " " << Name() << " removed from "
+ << " linkedFromnodes of " << ToNode->Name() << endl ;
+ int i ;
+ for ( i = 0 ; i < ToNode->_LinkedFromNodesSize ; i++ ) {
+ if ( i >= fromindex ) {
+ ToNode->_LinkedFromNodes[ i ] = ToNode->_LinkedFromNodes[ i+1 ] ;
+ ToNode->_LinkedFromInPortsNumber[ i ] = ToNode->_LinkedFromInPortsNumber[ i+1 ] ;
+ ToNode->SetLinkedFromNodeIndex( ToNode->_LinkedFromNodes[ i ]->Name() , i ) ;
+ }
+ cdebug << "StreamNode::RemoveLinkedFromNode" << i << " "
+ << ToNode->_LinkedFromNodes[ i ]->Name() << endl ;
+ }
+ ToNode->DelLinkedFromNodeIndex( Name() ) ;
+ ToNode->_LinkedFromNodes.resize( ToNode->_LinkedFromNodesSize+1 ) ;
+ ToNode->_LinkedFromInPortsNumber.resize( ToNode->_LinkedFromNodesSize+1 ) ;
+ }
+ }
+ else if ( DoLinkedFromNode ) {
+ cdebug << "StreamNode::RemoveLinkedFromNode index Error " << ToNode->Name() << " --> "
+ << Name() << " : " << fromindex
+ << " _LinkedFromNodesSize " << ToNode->_LinkedFromNodesSize << endl ;
+ }
+ else {
+ cdebug << "StreamNode::RemoveLinkedFromNode index " << ToNode->Name() << " --> " << Name()
+ << " : " << fromindex
+ << " _LinkedFromNodesSize " << ToNode->_LinkedFromNodesSize << endl ;
+ fromindex = 0 ; // No error in EndSwitchNodes
+ }
+
#if 1
- map< string , int >::iterator aMapOfLinkedNodesIterator ;
- int i = 0 ;
- for ( aMapOfLinkedNodesIterator = _MapOfLinkedNodes.begin() ;
- aMapOfLinkedNodesIterator != _MapOfLinkedNodes.end() ; aMapOfLinkedNodesIterator++ ) {
- cdebug << "_MapOfLinkedNodes" << i++ << " " << aMapOfLinkedNodesIterator->first << " --> "
- << aMapOfLinkedNodesIterator->second << endl ;
+ map< string , int >::iterator aMapOfLinkedNodesIterator1 ;
+ int ii = 0 ;
+ for ( aMapOfLinkedNodesIterator1 = _MapOfLinkedNodes.begin() ;
+ aMapOfLinkedNodesIterator1 != _MapOfLinkedNodes.end() && ii < _LinkedNodesSize ;
+ aMapOfLinkedNodesIterator1++ ) {
+ if ( aMapOfLinkedNodesIterator1->second ) {
+ cdebug << "_MapOfLinkedNodes" << ii++ << " of " << Name() << " : "
+ << aMapOfLinkedNodesIterator1->first << " --> " << aMapOfLinkedNodesIterator1->second
+ << " " << _LinkedNodes[ aMapOfLinkedNodesIterator1->second - 1 ]->Name() << endl ;
+ }
+ else {
+ cdebug << "_MapOfLinkedNodes" << ii << " of " << Name() << " : "
+ << aMapOfLinkedNodesIterator1->second - 1 << endl ;
}
+ }
#endif
+#if 1
+ 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 ;
+ }
}
- return (index >= 0 ) ;
+#endif
+ cdebug_out << "StreamNode::RemoveLinkedNode between " << Name() << " and " << ToNode->Name()
+ << " " << (index >= 0) << " " << (fromindex >= 0) << endl ;
+ return (index >= 0 ) && (fromindex >= 0 ) ;
}
void GraphBase::StreamNode::ReNameLinkedNode( const char* OldNodeName ,
- const char* NewNodeName ) {
- cdebug_in << "GraphBase::StreamNode::ReNameLink (" << OldNodeName << " , "
- << NewNodeName << ")" << endl;
+ const char* NewNodeName ) {
+ cdebug_in << Name() << "->GraphBase::StreamNode::ReNameLinkedNode (" << OldNodeName << " , "
+ << NewNodeName << ") _LinkedNodesSize " << _LinkedNodesSize << endl;
int index = GetLinkedNodeIndex( OldNodeName ) ;
if ( index >= 0 ) {
// _MapOfLinkedNodes.erase( OldNodeName ) ;
DelLinkedNodeIndex( OldNodeName ) ;
SetLinkedNodeIndex( NewNodeName , index ) ;
}
- cdebug_out << "GraphBase::StreamNode::ReNameLink" << endl ;
+ else {
+ cdebug << "GraphBase::StreamNode::ReNameLinkedNode ERROR " << OldNodeName << " not found in "
+ << Name() << endl ;
+ }
+#if 1
+ map< string , int >::iterator aMapOfLinkedNodesIterator1 ;
+ int ii = 0 ;
+ for ( aMapOfLinkedNodesIterator1 = _MapOfLinkedNodes.begin() ;
+ aMapOfLinkedNodesIterator1 != _MapOfLinkedNodes.end() && ii < _LinkedNodesSize ;
+ aMapOfLinkedNodesIterator1++ ) {
+ cdebug << "_MapOfLinkedNodes" << ii++ << " of " << Name() << " : "
+ << aMapOfLinkedNodesIterator1->first << " --> " << aMapOfLinkedNodesIterator1->second
+ << " " << _LinkedNodes[ aMapOfLinkedNodesIterator1->second - 1 ]->Name() << endl ;
+ }
+#endif
+ cdebug_out << Name() << "->GraphBase::StreamNode::ReNameLinkedNode" << endl ;
+}
+
+void GraphBase::StreamNode::ReNameLinkedFromNode( const char* OldNodeName ,
+ const char* NewNodeName ) {
+ cdebug_in << Name() << "->GraphBase::StreamNode::ReNameLinkedFromNode (" << OldNodeName
+ << " , " << NewNodeName << ") _LinkedFromNodesSize " << _LinkedFromNodesSize
+ << endl;
+ int index = GetLinkedFromNodeIndex( OldNodeName ) ;
+ if ( index >= 0 ) {
+// _MapOfLinkedFromNodes.erase( OldNodeName ) ;
+ DelLinkedFromNodeIndex( OldNodeName ) ;
+ SetLinkedFromNodeIndex( NewNodeName , index ) ;
+ }
+ else {
+ cdebug << Name() << "->GraphBase::StreamNode::ReNameLinkedFromNode ERROR " << OldNodeName
+ << " not found in " << Name() << endl ;
+ }
+#if 1
+ map< string , int >::iterator aMapOfLinkedFromNodesIterator1 ;
+ int iifrom = 0 ;
+ for ( aMapOfLinkedFromNodesIterator1 = _MapOfLinkedFromNodes.begin() ;
+ aMapOfLinkedFromNodesIterator1 != _MapOfLinkedFromNodes.end() &&
+ iifrom < _LinkedFromNodesSize ; aMapOfLinkedFromNodesIterator1++ ) {
+ cdebug << "_MapOfLinkedFromNodes" << iifrom++ << " of " << Name() << " : "
+ << aMapOfLinkedFromNodesIterator1->first << " --> "
+ << aMapOfLinkedFromNodesIterator1->second << " "
+ << _LinkedFromNodes[ aMapOfLinkedFromNodesIterator1->second - 1 ]->Name()
+ << endl ;
+ }
+#endif
+ cdebug_out << Name() << "->GraphBase::StreamNode::ReNameLinkedFromNode" << endl ;
}
void GraphBase::StreamNode::AddStreamLinkedNode( GraphBase::StreamNode * ToNode ) {