LCOV - code coverage report
Current view: top level - geom - CAActuateSet.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 52 64 81.2 %
Date: 2020-06-30 00:58:45 Functions: 8 8 100.0 %
Branches: 81 182 44.5 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CAActuateSet.cpp
       3                 :            : //
       4                 :            : // Purpose       : Maintain the list of entities for which attributes are
       5                 :            : //                 being actuated such that any entities destroyed 
       6                 :            : //                 during actuation (e.g. merging) get removed from the
       7                 :            : //                 list.
       8                 :            : //
       9                 :            : // Special Notes : 
      10                 :            : //
      11                 :            : // Creator       : Jason Kraftcheck
      12                 :            : //
      13                 :            : // Creation Date : 05/28/02
      14                 :            : //-------------------------------------------------------------------------
      15                 :            : 
      16                 :            : #include "CAActuateSet.hpp"
      17                 :            : #include "RefEntity.hpp"
      18                 :            : #include "ModelQueryEngine.hpp"
      19                 :            : #include "Body.hpp"
      20                 :            : #include "BasicTopologyEntity.hpp"
      21                 :            : #include "AppUtil.hpp"
      22                 :            : #include "GeometryEvent.hpp"
      23                 :            : 
      24                 :            : #include "RefFace.hpp"
      25                 :            : #include "RefEdge.hpp"
      26                 :            : #include "RefVertex.hpp"
      27                 :            : #include "RefVolume.hpp"
      28                 :            : #include "RefGroup.hpp"
      29                 :            : 
      30                 :            : //-------------------------------------------------------------------------
      31                 :            : // Purpose       : Constructor
      32                 :            : //
      33                 :            : // Special Notes : 
      34                 :            : //
      35                 :            : // Creator       : Jason Kraftcheck
      36                 :            : //
      37                 :            : // Creation Date : 05/28/02
      38                 :            : //-------------------------------------------------------------------------
      39                 :       1137 : CAActuateSet::CAActuateSet( DLIList<RefEntity*>& actuate_list )
      40 [ +  - ][ +  + ]:       6822 :   : currentDimension(-1)
           [ +  -  #  #  
             #  #  #  # ]
      41                 :            : {
      42                 :            :     // register this as a static observer so that we can
      43                 :            :     // remove entities from the lists as they are destroyed
      44 [ +  - ][ +  - ]:       1137 :   AppUtil::instance()->event_dispatcher().add_observer(this);
                 [ +  - ]
      45                 :            :   
      46                 :            :     // put all entities in the actuate_list into the typeList
      47                 :            :     // for the appropriate dimension of entity.
      48 [ +  - ][ +  + ]:       6941 :   for( int i = actuate_list.size(); i--; )
      49                 :            :   {
      50         [ +  - ]:       5804 :     RefEntity* entity_ptr = actuate_list.get_and_step();
      51         [ +  - ]:       5804 :     int dimension = entity_ptr->dimension();
      52         [ +  + ]:       5804 :     if( dimension < 0 ) // body
      53                 :       1802 :       dimension = 4;
      54         [ +  - ]:       5804 :     typeList[dimension].append( entity_ptr );
      55                 :            :   }
      56         [ #  # ]:       1137 : }
      57                 :            : 
      58                 :            : //-------------------------------------------------------------------------
      59                 :            : // Purpose       : Destructor
      60                 :            : //
      61                 :            : // Special Notes : 
      62                 :            : //
      63                 :            : // Creator       : Jason Kraftcheck
      64                 :            : //
      65                 :            : // Creation Date : 05/28/02
      66                 :            : //-------------------------------------------------------------------------
      67 [ +  - ][ +  - ]:       7959 : CAActuateSet::~CAActuateSet()
         [ +  + ][ +  - ]
           [ #  #  #  # ]
      68                 :            : {
      69                 :            :     // remove from static observer list
      70                 :            : 
      71 [ +  - ][ +  - ]:       1137 :   AppUtil::instance()->event_dispatcher().remove_observer(this);
                 [ +  - ]
      72         [ -  + ]:       1137 : }
      73                 :            : 
      74                 :            : //-------------------------------------------------------------------------
      75                 :            : // Purpose       : Populate currentList with entities of the specified
      76                 :            : //                 dimension.  This includes children of any entities 
      77                 :            : //                 of a higher dimension that are in the lists managed
      78                 :            : //                 by this object.
      79                 :            : //
      80                 :            : // Special Notes : 
      81                 :            : //
      82                 :            : // Creator       : Jason Kraftcheck
      83                 :            : //
      84                 :            : // Creation Date : 05/28/02
      85                 :            : //-------------------------------------------------------------------------
      86                 :      10233 : void CAActuateSet::set_current_dimension( int dimension )
      87                 :            : {
      88                 :            :   int i;
      89 [ +  - ][ +  - ]:      20466 :   DLIList<TopologyEntity*> query_source, query_target;
                 [ +  - ]
      90 [ +  - ][ +  - ]:      20466 :   DLIList<RefEntity*> temp_list;
      91                 :            :   
      92                 :            :     // Clean out current list before adding new entities
      93         [ +  - ]:      10233 :   currentList.clean_out();
      94                 :            :   
      95                 :            :     // Get the target type to query for.
      96         [ +  - ]:      10233 :   DagType type = get_type_id( dimension );
      97                 :            : 
      98                 :            :     // Get children of higher-order entities
      99         [ +  + ]:      32973 :   for( i = 4; i > dimension; i-- )
     100                 :            :   {
     101         [ +  - ]:      22740 :     query_source.clean_out();
     102         [ +  - ]:      22740 :     query_target.clean_out();
     103                 :            :     
     104 [ +  - ][ +  - ]:      45718 :     CAST_LIST( typeList[i], query_source, TopologyEntity );
         [ +  - ][ -  + ]
         [ +  - ][ +  - ]
                 [ +  + ]
     105                 :            :     ModelQueryEngine::instance()
     106 [ +  - ][ +  - ]:      22740 :       ->query_model( query_source, type, query_target );
     107                 :            :     
     108         [ +  - ]:      22740 :     temp_list.clean_out();
     109 [ +  - ][ +  - ]:     156892 :     CAST_LIST( query_target, temp_list, RefEntity );
         [ +  - ][ -  + ]
         [ +  - ][ +  - ]
                 [ +  + ]
     110                 :            :     
     111         [ +  - ]:      22740 :     append_to_current( temp_list );
     112                 :            :   }
     113                 :            :   
     114                 :            :     // Add lcoal entities of current dimension
     115         [ +  - ]:      10233 :   append_to_current( typeList[dimension] );
     116                 :            : 
     117                 :            :     // Save current dimension
     118         [ +  - ]:      10233 :   currentDimension = dimension;
     119                 :      10233 : }
     120                 :            : 
     121                 :            : //-------------------------------------------------------------------------
     122                 :            : // Purpose       : Add entities to currentList
     123                 :            : //
     124                 :            : // Special Notes : Make sure no duplicates are added
     125                 :            : //
     126                 :            : // Creator       : Jason Kraftcheck
     127                 :            : //
     128                 :            : // Creation Date : 05/28/02
     129                 :            : //-------------------------------------------------------------------------
     130                 :      32973 : void CAActuateSet::append_to_current( DLIList<RefEntity*>& list )
     131                 :            : {
     132                 :            :   int i;
     133                 :            :   
     134                 :            :     // Set marks on all new entities
     135         [ +  + ]:     176931 :   for( i = list.size(); i--; )
     136                 :     143958 :     list.get_and_step()->marked(1);
     137                 :            :   
     138                 :            :     // Clear marks on entities in current list, 
     139                 :            :     // including those also in the new list.
     140         [ +  + ]:     395215 :   for( i = currentList.size(); i--; )
     141                 :     362242 :     currentList.get_and_step()->marked(0);
     142                 :            :   
     143                 :            :     // Any entities in the new list that are still
     144                 :            :     // marked are not already in the current list.
     145                 :            :     // Add them.
     146         [ +  + ]:     176931 :   for( i = list.size(); i--; )
     147                 :            :   {
     148         [ +  - ]:     143958 :     RefEntity* entity_ptr = list.get_and_step();
     149 [ +  - ][ +  + ]:     143958 :     if( entity_ptr->marked() )
     150                 :            :     {
     151         [ +  - ]:     121824 :       currentList.append( entity_ptr );
     152         [ +  - ]:     143958 :       entity_ptr->marked(0);
     153                 :            :     }
     154                 :            :   }
     155                 :      32973 : }
     156                 :            : 
     157                 :            : //-------------------------------------------------------------------------
     158                 :            : // Purpose       : Remove deleted entities from lists
     159                 :            : //
     160                 :            : // Special Notes : 
     161                 :            : //
     162                 :            : // Creator       : Jason Kraftcheck
     163                 :            : //
     164                 :            : // Creation Date : 05/28/02
     165                 :            : //-------------------------------------------------------------------------
     166                 :         44 : void CAActuateSet::notify_observer( const CubitEvent* observer_event)
     167                 :            : {
     168                 :            :   RefEntity* entity_ptr;
     169                 :            :   int dimension;
     170                 :            : 
     171         [ -  + ]:         44 :   const GeometryEvent* geom_event = dynamic_cast<const GeometryEvent*>(observer_event);
     172                 :            :   
     173                 :            :     // only care about entities that are destroyed
     174 [ +  - ][ +  - ]:         44 :   if(!geom_event || geom_event->get_type() != GeometryEvent::TOPOLOGY_ENTITY_DESTRUCTED)
         [ +  - ][ +  - ]
     175                 :         44 :     return;
     176                 :            : 
     177                 :            : 
     178                 :            :     // is it a body?
     179 [ #  # ][ #  # ]:          0 :   if( (entity_ptr = dynamic_cast<Body*>(geom_event->get_entity()) ) != NULL )
         [ #  # ][ #  # ]
     180                 :          0 :     dimension = 4;
     181                 :            : 
     182                 :            :     // is it some other topology entity
     183 [ #  # ][ #  # ]:          0 :   else if( (entity_ptr = dynamic_cast<BasicTopologyEntity*>(geom_event->get_entity()) )
         [ #  # ][ #  # ]
     184                 :          0 :            != NULL )
     185         [ #  # ]:          0 :     dimension = entity_ptr->dimension();
     186                 :            : 
     187                 :            :     // otherwise we don't care about it
     188                 :            :   else
     189                 :          0 :     return;
     190                 :            :   
     191                 :            : 
     192                 :            :     // if it exists in the type list, remove it
     193 [ #  # ][ #  # ]:          0 :   if( typeList[dimension].move_to( entity_ptr ) )
     194         [ #  # ]:          0 :     typeList[dimension].extract();
     195                 :            :   
     196                 :            :     // if it exists in the current list, remove it.
     197 [ #  # ][ #  # ]:          0 :   if( dimension == currentDimension && 
                 [ #  # ]
     198         [ #  # ]:          0 :       currentList.move_to( entity_ptr ) )
     199         [ #  # ]:          0 :     currentList.extract();
     200                 :            :     
     201                 :            : }
     202                 :            : 
     203                 :      10233 : DagType CAActuateSet::get_type_id( int dimension )
     204                 :            : {
     205   [ +  +  +  +  :      10233 :   switch( dimension )
                   +  - ]
     206                 :            :   {
     207                 :       1137 :     case 4:  return DagType::body_type();     
     208                 :       2274 :     case 3:  return DagType::ref_volume_type();
     209                 :       2274 :     case 2:  return DagType::ref_face_type();  
     210                 :       2274 :     case 1:  return DagType::ref_edge_type();  
     211                 :       2274 :     case 0:  return DagType::ref_vertex_type();
     212                 :          0 :     default: assert(0); 
     213                 :            :              return DagType::invalid_type();
     214                 :            :   }
     215 [ +  - ][ +  - ]:       6540 : }

Generated by: LCOV version 1.11