--- /dev/null
+// SUPERV GraphBase : contains fondamental classes for Services, Input Ports, Output Ports Links and Nodes.
+//
+// Copyright (C) 2003 CEA/DEN, EDF R&D
+//
+//
+//
+// File : DataFlowBase_StreamNode.hxx
+// Author : Jean Rahuel
+// Module : SUPERV
+// $Header:
+
+#ifndef _DATAFLOWBASE_STREAMNODE_HXX
+#define _DATAFLOWBASE_STREAMNODE_HXX
+
+#include "DataFlowBase_PortsOfNode.hxx"
+
+namespace GraphBase {
+
+ class StreamNode : public PortsOfNode {
+
+ private:
+
+ char * _Name ;
+ SUPERV::KindOfNode _Kind ;
+
+// Nodes with LinkedInPortsNumber InPort(s) linked to Outport(s) of this node :
+ map< string , int > _MapOfLinkedNodes ;
+ int _LinkedNodesSize ;
+ vector<StreamNode * > _LinkedNodes ;
+ vector<int > _LinkedInPortsNumber ;
+
+// Nodes with InStreamPort(s) linked to OutStreamport(s) of this node :
+// NodeName <--> index of that linked node in _LinkedNodes
+ map< string , int > _MapOfLinkedStreamNodes ;
+ int _LinkedStreamNodesSize ;
+ vector<StreamNode * > _LinkedStreamNodes ;
+ vector<int > _LinkedInStreamPortsNumber ;
+
+ bool _HeadNode ;
+ int _LevelNumber ;
+ int _SortedIndex ;
+
+ int _SubGraphNumber ;
+ int _SubStreamGraphNumber ;
+
+ protected:
+
+ int * _Graph_prof_debug ;
+ ofstream * _Graph_fdebug ;
+
+ StreamNode() ;
+
+ StreamNode( const char * NodeName ) ;
+
+ StreamNode( int * Graph_prof_debug ,
+ ofstream * Graph_fdebug ) ;
+
+ virtual ~StreamNode() ;
+
+ public:
+
+ char * Name() const { return my_strdup( _Name ) ; } ;
+ const char *const * NamePtr() const { return &_Name ; } ;
+ bool Name( const char * aName ) ;
+
+ SUPERV::KindOfNode Kind() const {
+ return _Kind; } ;
+ bool Kind( SUPERV::KindOfNode aKind) {
+ _Kind = aKind ;
+ return true ; } ;
+ const bool IsComputingNode() const {
+ return (Kind() == SUPERV::ComputingNode ) ; } ;
+ const bool IsFactoryNode() const {
+ return (Kind() == SUPERV::FactoryNode ) ; } ;
+ const bool IsOneOfGOTONodes() const {
+ return (Kind() == SUPERV::LoopNode ||
+ Kind() == SUPERV::EndLoopNode ||
+ Kind() == SUPERV::SwitchNode ||
+ Kind() == SUPERV::EndSwitchNode ||
+ Kind() == SUPERV::GOTONode ) ; } ;
+ const bool IsOneOfInLineNodes() const {
+ return (Kind() == SUPERV::InLineNode || IsOneOfGOTONodes() ) ; } ;
+ const bool IsInLineNode() const {
+ return (Kind() == SUPERV::InLineNode ) ; } ;
+ const bool IsDataFlowNode() const {
+ return (Kind() == SUPERV::DataFlowGraph ) ; } ;
+ const bool IsDataStreamNode() const {
+ return (Kind() == SUPERV::DataStreamGraph ) ; } ;
+ const bool IsLoopNode() const {
+ return (Kind() == SUPERV::LoopNode ) ; } ;
+ const bool IsEndLoopNode() const {
+ return (Kind() == SUPERV::EndLoopNode ) ; } ;
+ const bool IsSwitchNode() const {
+ return (Kind() == SUPERV::SwitchNode ) ; } ;
+ const bool IsEndSwitchNode() const {
+ return (Kind() == SUPERV::EndSwitchNode ) ; } ;
+ const bool IsGOTONode() const {
+ return (Kind() == SUPERV::GOTONode ) ; } ;
+
+ int GetLinkedNodeIndex( const char * name ) {
+ int index = _MapOfLinkedNodes[ name ] -1 ;
+ if ( index >= 0 ) {
+ cdebug << "GetLinkedNodeIndex of " << name
+ << " in _MapOfLinkedNodes : "
+ << index << " Node " << hex << (void *) _LinkedNodes[ index ]
+ << dec << " '" << _LinkedNodes[ index ]->Name() << "'"
+ << endl ;
+ }
+ return index ; } ;
+ void SetLinkedNodeIndex( const char * name , const int index ) {
+ _MapOfLinkedNodes[ name ] = index +1 ;
+ cdebug << "SetLinkedNodeIndex of " << name << " in _MapOfLinkedNodes : "
+ << index << " Node " << hex << (void *) _LinkedNodes[ index ]
+ << dec << " '" << _LinkedNodes[ index ]->Name() << "'"
+ << " _MapOfLinkedNodes " << _MapOfLinkedNodes[ name ] - 1
+ << endl ;
+ } ;
+ void DelLinkedNodeIndex( const char * name ) {
+ _MapOfLinkedNodes.erase( name ) ; } ;
+
+ int LinkedNodesSize() const { return _LinkedNodesSize ; } ;
+
+ const int LinkedInPortsNumber( int i ) const { return _LinkedInPortsNumber[ i ] ; } ;
+
+ StreamNode * LinkedNodes( int i ) const { return _LinkedNodes[ i ] ; } ;
+
+ int GetLinkedStreamNodeIndex( const char * name ) {
+ int index = _MapOfLinkedStreamNodes[ name ] -1 ;
+ if ( index >= 0 ) {
+ cdebug << "GetLinkedStreamNodeIndex of " << name
+ << " in _MapOfLinkedStreamNodes : "
+ << index << " Node " << hex << (void *) _LinkedStreamNodes[ index ]
+ << dec << " '" << _LinkedStreamNodes[ index ]->Name() << "'"
+ << endl ;
+ }
+ return index ; } ;
+ void SetLinkedStreamNodeIndex( const char * name , const int index ) {
+ _MapOfLinkedStreamNodes[ name ] = index +1 ;
+ cdebug << "SetLinkedStreamNodeIndex of " << name << " in _MapOfLinkedStreamNodes : "
+ << index << " Node " << hex << (void *) _LinkedStreamNodes[ index ]
+ << dec << " '" << _LinkedStreamNodes[ index ]->Name() << "'"
+ << " _MapOfLinkedStreamNodes " << _MapOfLinkedStreamNodes[ name ] - 1
+ << endl ;
+ } ;
+ void DelLinkedStreamNodeIndex( const char * name ) {
+ _MapOfLinkedStreamNodes.erase( name ) ; } ;
+
+ int LinkedStreamNodesSize() const { return _LinkedStreamNodesSize ; } ;
+
+ const int LinkedInStreamPortsNumber( int i ) const { return _LinkedInStreamPortsNumber[ i ] ; } ;
+
+ StreamNode * LinkedStreamNodes( int i ) const { return _LinkedStreamNodes[ i ] ; } ;
+
+ void HeadNode( bool aHeadNode ) { _HeadNode = aHeadNode ; } ;
+ const bool IsHeadNode() const { return _HeadNode ; } ;
+
+ int Level() { return _LevelNumber ; } ;
+ void Level( int LevelNumber ) {
+ _LevelNumber = LevelNumber ; } ;
+
+ void SortedIndex( int aSortedIndex ) {
+ _SortedIndex = aSortedIndex ; } ;
+ int SortedIndex() const {
+ return _SortedIndex ; } ;
+
+ void SetSubStreamGraph( int SubStreamGraphsNumber , int & RetVal ) ;
+
+ int SubGraph() { return _SubGraphNumber ; } ;
+ void SubGraph( int SubGraphNumber ) {
+ _SubGraphNumber = SubGraphNumber ; } ;
+
+ int SubStreamGraph() { return _SubStreamGraphNumber ; } ;
+ void SubStreamGraph( int SubStreamGraphNumber ) {
+ _SubStreamGraphNumber = SubStreamGraphNumber ; } ;
+
+ void AddLink( StreamNode * aNode ) ;
+ bool RemoveLink( StreamNode * aNode ) ;
+ void ReNameLink( const char* OldNodeName ,
+ const char* NewNodeName ) ;
+
+ void AddStreamLink( StreamNode * aNode ) ;
+ bool RemoveStreamLink( StreamNode * aNode ) ;
+ void ReNameStreamLink( const char* OldNodeName ,
+ const char* NewNodeName ) ;
+
+ };
+
+};
+
+#endif