LCOV - code coverage report
Current view: top level - geom - DAG.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 25 71 35.2 %
Date: 2020-06-30 00:58:45 Functions: 6 11 54.5 %
Branches: 7 112 6.2 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Copyright Notice
       3                 :            : //
       4                 :            : // Copyright (c) 1996 
       5                 :            : // by Malcolm J. Panthaki, DBA, and the University of New Mexico.
       6                 :            : //-------------------------------------------------------------------------
       7                 :            : 
       8                 :            : //-------------------------------------------------------------------------
       9                 :            : // Filename      : DAG.cc
      10                 :            : //
      11                 :            : // Purpose       : 
      12                 :            : //
      13                 :            : // Special Notes :
      14                 :            : //
      15                 :            : // Creator       : Raikanta Sahu
      16                 :            : //
      17                 :            : // Creation Date : 12/02/96
      18                 :            : //
      19                 :            : // Owner         : Raikanta Sahu
      20                 :            : //-------------------------------------------------------------------------
      21                 :            : 
      22                 :            : // ********** BEGIN STANDARD INCLUDES         **********
      23                 :            : // ********** END STANDARD INCLUDES           **********
      24                 :            : 
      25                 :            : // ********** BEGIN MOTIF INCLUDES            **********
      26                 :            : // ********** END MOTIF INCLUDES              **********
      27                 :            : 
      28                 :            : // ********** BEGIN OPEN INVENTOR INCLUDES    **********
      29                 :            : // ********** END OPEN INVENTOR INCLUDES      **********
      30                 :            : 
      31                 :            : // ********** BEGIN CUBIT INCLUDES            **********
      32                 :            : 
      33                 :            : #include "DAG.hpp"
      34                 :            : #include "CastTo.hpp"
      35                 :            : #include "TopologyEntity.hpp"
      36                 :            : #include "CubitObserver.hpp"
      37                 :            : 
      38                 :            : // ********** END CUBIT INCLUDES              **********
      39                 :            : 
      40                 :            : // ********** BEGIN EXTERN DECLARATIONS       **********
      41                 :            : // ********** END EXTERN DECLARATIONS         **********
      42                 :            : 
      43                 :            : // ********** BEGIN STATIC DECLARATIONS       **********
      44                 :            : 
      45                 :            : DAG* DAG::instance_ = NULL ;
      46                 :            : 
      47                 :            : // ********** END STATIC DECLARATIONS         **********
      48                 :            : 
      49                 :            : // ********** BEGIN PUBLIC FUNCTIONS          **********
      50                 :            : 
      51                 :            : //-------------------------------------------------------------------------
      52                 :            : // Purpose       : Return a pointer to the only instance of the class.
      53                 :            : //
      54                 :            : // Special Notes :
      55                 :            : //
      56                 :            : // Creator       : Raikanta Sahu
      57                 :            : //
      58                 :            : // Creation Date : 12/02/96
      59                 :            : //-------------------------------------------------------------------------
      60                 :     369774 : DAG* DAG::instance()
      61                 :            : {
      62         [ +  + ]:     369774 :   if (instance_ == NULL ) 
      63                 :            :   {
      64         [ +  - ]:        490 :     instance_ = new DAG;
      65                 :            :   }
      66                 :     369774 :   return instance_ ;
      67                 :            : }
      68                 :            : 
      69                 :            : //-------------------------------------------------------------------------
      70                 :            : // Purpose       : The destructor
      71                 :            : //
      72                 :            : // Special Notes :
      73                 :            : //
      74                 :            : // Creator       : Raikanta Sahu
      75                 :            : //
      76                 :            : // Creation Date : 12/02/96
      77                 :            : //-------------------------------------------------------------------------
      78                 :        302 : DAG::~DAG()
      79                 :            : {
      80                 :        151 :   instance_ = NULL ;
      81                 :        151 : }
      82                 :            : 
      83                 :            : //-------------------------------------------------------------------------
      84                 :            : // Purpose       : This function takes a pointer to a deactivated DAG 
      85                 :            : //                 node and adds it to the list of deactivated DAG nodes.
      86                 :            : //
      87                 :            : // Special Notes :
      88                 :            : //
      89                 :            : // Creator       : Raikanta Sahu
      90                 :            : //
      91                 :            : // Creation Date : 12/02/96
      92                 :            : //-------------------------------------------------------------------------
      93                 :            : 
      94                 :     182360 : void DAG::add_deactivated_DAG_node(TopologyEntity* deactivatedDAGNodePtr)
      95                 :            : {
      96                 :     182360 :   deactivatedDAGNodeList_.append(deactivatedDAGNodePtr) ;
      97                 :     182360 : }
      98                 :            : 
      99                 :            : //-------------------------------------------------------------------------
     100                 :            : // Purpose       : This function takes a pointer to a deactivated DAG 
     101                 :            : //                 node and removes it to the list of deactivated DAG nodes.
     102                 :            : //
     103                 :            : // Special Notes :
     104                 :            : //
     105                 :            : // Creator       : Raikanta Sahu
     106                 :            : //
     107                 :            : // Creation Date : 12/02/96
     108                 :            : //-------------------------------------------------------------------------
     109                 :            : 
     110                 :          0 : void DAG::remove_deactivated_DAG_node(TopologyEntity* deactivatedDAGNodePtr)
     111                 :            : {
     112         [ #  # ]:          0 :   if (deactivatedDAGNodeList_.move_to(deactivatedDAGNodePtr))
     113                 :          0 :     deactivatedDAGNodeList_.extract();
     114                 :          0 : }
     115                 :            : 
     116                 :            : //-------------------------------------------------------------------------
     117                 :            : // Purpose       : This function deletes all the deactivated DAG nodes
     118                 :            : //                 and cleans the list of deactivated DAG nodes.
     119                 :            : // Special Notes :
     120                 :            : //
     121                 :            : // Creator       : Raikanta Sahu
     122                 :            : //
     123                 :            : // Creation Date : 12/02/96
     124                 :            : //-------------------------------------------------------------------------
     125                 :       5054 : void DAG::cleanout_deactivated_DAG_nodes() 
     126                 :            : {
     127                 :       5054 :   TopologyEntity* tempDAGNode = NULL;
     128         [ +  + ]:     187414 :   while ( deactivatedDAGNodeList_.size() > 0)
     129                 :            :   {
     130                 :     182360 :     tempDAGNode = NULL;
     131                 :     182360 :     deactivatedDAGNodeList_.last();
     132                 :     182360 :     tempDAGNode = deactivatedDAGNodeList_.get();
     133         [ +  - ]:     182360 :     if( tempDAGNode != NULL )
     134                 :            :     {
     135         [ +  - ]:     182360 :       delete tempDAGNode;
     136                 :            :     }
     137                 :            :   }
     138                 :            :    
     139                 :       5054 :   deactivatedDAGNodeList_.clean_out() ;
     140                 :       5054 : }
     141                 :            : 
     142                 :            : //-------------------------------------------------------------------------
     143                 :            : // Purpose       :  This function is used to notify the DAG class that an
     144                 :            : //                  event has occurred.  The input object that initiated the
     145                 :            : //                  the event is a DAG Node.
     146                 :            : //
     147                 :            : // Special Notes :
     148                 :            : //
     149                 :            : // Creator       : Malcolm J. Panthaki
     150                 :            : //
     151                 :            : // Creation Date : 12/03/96
     152                 :            : //-------------------------------------------------------------------------
     153                 :     182360 : void DAG::remove(TopologyEntity* DAGNodePtr)
     154                 :            : {
     155                 :            :     // If this input pointer exists in the deactivated DAG Node list,
     156                 :            :     // remove it
     157                 :     182360 :   deactivatedDAGNodeList_.remove(DAGNodePtr);
     158                 :     182360 : }
     159                 :            : 
     160                 :            : 
     161                 :            : //-------------------------------------------------------------------------
     162                 :            : // Purpose       : Find the children of a node at a specified level in the 
     163                 :            : //                 DAG, relative to the node.
     164                 :            : //
     165                 :            : // Special Notes :
     166                 :            : //
     167                 :            : // Creator       : Jason Kraftcheck
     168                 :            : //
     169                 :            : // Creation Date : 09/16/97
     170                 :            : //-------------------------------------------------------------------------
     171                 :          0 : CubitStatus DAG::get_children_at_level( TopologyEntity* parent, int level,
     172                 :            :                                         DLIList<TopologyEntity*>& result_set )
     173                 :            : {
     174         [ #  # ]:          0 :   DLIList<TopologyEntity*> parent_list;  // nodes at current level
     175                 :            :         
     176                 :            :     // Start with a parent_list with one node, the passed parent
     177         [ #  # ]:          0 :   parent_list.append( parent );
     178                 :            :         
     179                 :            :     // Call with list
     180 [ #  # ][ #  # ]:          0 :   return get_children_at_level( parent_list, level, result_set );
     181                 :            : }
     182                 :            : 
     183                 :            : //-------------------------------------------------------------------------
     184                 :            : // Purpose       : Find the parents of a node at a specified level in the 
     185                 :            : //                 DAG, relative to the node.
     186                 :            : //
     187                 :            : // Special Notes :
     188                 :            : //
     189                 :            : // Creator       : Jason Kraftcheck
     190                 :            : //
     191                 :            : // Creation Date : 09/16/97
     192                 :            : //-------------------------------------------------------------------------
     193                 :          0 : CubitStatus DAG::get_parents_at_level( TopologyEntity* child, int level,
     194                 :            :                                        DLIList<TopologyEntity*>& result_set )
     195                 :            : {
     196         [ #  # ]:          0 :   DLIList<TopologyEntity*> child_list;  // nodes at current level
     197                 :            :         
     198                 :            :     // Start with a parent_list with one node, the passed parent
     199         [ #  # ]:          0 :   child_list.append( child );
     200                 :            :         
     201                 :            :     // Call with list
     202 [ #  # ][ #  # ]:          0 :   return get_parents_at_level( child_list, level, result_set );
     203                 :            : }
     204                 :            : 
     205                 :            : 
     206                 :            : //-------------------------------------------------------------------------
     207                 :            : // Purpose       : Find the children of a list of nodes at a specified 
     208                 :            : //                 level in the DAG, relative to the node.
     209                 :            : //
     210                 :            : // Special Notes :
     211                 :            : //
     212                 :            : // Creator       : Jason Kraftcheck
     213                 :            : //
     214                 :            : // Creation Date : 09/16/97
     215                 :            : //-------------------------------------------------------------------------
     216                 :          0 : CubitStatus DAG::get_children_at_level( DLIList<TopologyEntity*>& parent_list,
     217                 :            :                                         int level,
     218                 :            :                                         DLIList<TopologyEntity*>& result_set )
     219                 :            : {
     220         [ #  # ]:          0 :   assert( level > 0 );
     221 [ #  # ][ #  # ]:          0 :   if( parent_list.size( ) < 1 ) return CUBIT_FAILURE;
     222                 :            :         
     223         [ #  # ]:          0 :   DLIList<TopologyEntity*> child_list;   // children of all parents
     224 [ #  # ][ #  # ]:          0 :   DLIList<TopologyEntity*> current_node_children;
     225                 :            :         
     226                 :            :     //Get a list of all the children one level down from 
     227                 :            :     //the nodes in parent_list.
     228 [ #  # ][ #  # ]:          0 :   for( int i = 0; i < parent_list.size( ); i++ )
     229                 :            :   {
     230         [ #  # ]:          0 :     TopologyEntity* current = parent_list.get_and_step( );
     231                 :            :                 
     232         [ #  # ]:          0 :     current_node_children.clean_out( );
     233         [ #  # ]:          0 :     current->get_children( &current_node_children );
     234                 :            :                 
     235 [ #  # ][ #  # ]:          0 :     for( int j = 0; j < current_node_children.size( ); j++ )
     236                 :            :     {
     237                 :            :       child_list.append_unique(
     238 [ #  # ][ #  # ]:          0 :         current_node_children.get_and_step( ) );
     239                 :            :     }
     240                 :            :   }
     241                 :            :         
     242                 :            :     //If we found no children, return failure.
     243 [ #  # ][ #  # ]:          0 :   if( child_list.size( ) < 1 ) return CUBIT_FAILURE;
     244                 :            :         
     245                 :            :     //If level 1, then return the list of children.
     246         [ #  # ]:          0 :   if( level == 1 )
     247                 :            :   {
     248         [ #  # ]:          0 :     result_set = child_list;
     249                 :          0 :     return CUBIT_SUCCESS;
     250                 :            :   }
     251                 :            :     //Otherwise get next level down by recursion.
     252                 :            :   else
     253                 :            :   {
     254                 :            :     return get_children_at_level( child_list, level - 1, 
     255         [ #  # ]:          0 :                                   result_set );
     256         [ #  # ]:          0 :   }     
     257                 :            : }
     258                 :            : 
     259                 :            : //-------------------------------------------------------------------------
     260                 :            : // Purpose       : Find the parents of a list of nodes at a specified level
     261                 :            : //                 in the DAG, relative to the node.
     262                 :            : //
     263                 :            : // Special Notes :
     264                 :            : //
     265                 :            : // Creator       : Jason Kraftcheck
     266                 :            : //
     267                 :            : // Creation Date : 09/16/97
     268                 :            : //-------------------------------------------------------------------------
     269                 :          0 : CubitStatus DAG::get_parents_at_level( DLIList<TopologyEntity*>& child_list,
     270                 :            :                                        int level,
     271                 :            :                                        DLIList<TopologyEntity*>& result_set )
     272                 :            : {
     273         [ #  # ]:          0 :   assert( level > 0 );
     274 [ #  # ][ #  # ]:          0 :   if( child_list.size( ) < 1 ) return CUBIT_FAILURE;
     275                 :            :         
     276         [ #  # ]:          0 :   DLIList<TopologyEntity*> parent_list;   // children of all parents
     277 [ #  # ][ #  # ]:          0 :   DLIList<TopologyEntity*> current_node_parents;
     278                 :            :         
     279                 :            :     //Get a list of all the parents one level up from 
     280                 :            :     //the nodes in child_list.
     281 [ #  # ][ #  # ]:          0 :   for( int i = 0; i < child_list.size( ); i++ )
     282                 :            :   {
     283         [ #  # ]:          0 :     TopologyEntity* current = child_list.get_and_step( );
     284                 :            :                 
     285         [ #  # ]:          0 :     current_node_parents.clean_out( );
     286         [ #  # ]:          0 :     current->get_parents( &current_node_parents );
     287                 :            :                 
     288 [ #  # ][ #  # ]:          0 :     for( int j = 0; j < current_node_parents.size( ); j++ )
     289                 :            :     {
     290                 :            :       parent_list.append_unique(
     291 [ #  # ][ #  # ]:          0 :         current_node_parents.get_and_step( ) );
     292                 :            :     }
     293                 :            :   }
     294                 :            :         
     295                 :            :     //If we found no parents, return failure.
     296 [ #  # ][ #  # ]:          0 :   if( parent_list.size( ) < 1 ) return CUBIT_FAILURE;
     297                 :            :         
     298                 :            :     //If level 1, then return the list of parents.
     299         [ #  # ]:          0 :   if( level == 1 )
     300                 :            :   {
     301         [ #  # ]:          0 :     result_set = parent_list;
     302                 :          0 :     return CUBIT_SUCCESS;
     303                 :            :   }
     304                 :            :     //Otherwise get next level down by recursion.
     305                 :            :   else
     306                 :            :   {
     307                 :            :     return get_parents_at_level( parent_list, level - 1, 
     308         [ #  # ]:          0 :                                  result_set );
     309         [ #  # ]:          0 :   }     
     310                 :            : }
     311                 :            : 
     312                 :            : 
     313                 :            : 
     314                 :            : 
     315                 :            : // ********** END PUBLIC FUNCTIONS            **********
     316                 :            : 
     317                 :            : // ********** BEGIN PROTECTED FUNCTIONS       **********
     318                 :            : //-------------------------------------------------------------------------
     319                 :            : // Purpose       : The default constructor
     320                 :            : //
     321                 :            : // Special Notes :
     322                 :            : //
     323                 :            : // Creator       : Raikanta Sahu
     324                 :            : //
     325                 :            : // Creation Date : 12/02/96
     326                 :            : //-------------------------------------------------------------------------
     327                 :        980 : DAG::DAG() : deactivatedDAGNodeList_() 
     328                 :            : {
     329                 :        490 : }
     330                 :            : 
     331                 :            : // ********** END PROTECTED FUNCTIONS         **********
     332                 :            : 
     333                 :            : // ********** BEGIN PRIVATE FUNCTIONS         **********
     334                 :            : // ********** END PRIVATE FUNCTIONS           **********
     335                 :            : 
     336                 :            : // ********** BEGIN HELPER CLASSES            **********
     337                 :            : // ********** END HELPER CLASSES              **********
     338                 :            : 
     339                 :            : // ********** BEGIN EXTERN FUNCTIONS          **********
     340                 :            : // ********** END EXTERN FUNCTIONS            **********
     341                 :            : 
     342                 :            : // ********** BEGIN STATIC FUNCTIONS          **********
     343                 :            : // ********** END STATIC FUNCTIONS            **********
     344                 :            : 

Generated by: LCOV version 1.11