LCOV - code coverage report
Current view: top level - geom - TopologyBridge.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 183 319 57.4 %
Date: 2020-06-30 00:58:45 Functions: 16 21 76.2 %
Branches: 263 848 31.0 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : TopologyBridge.cpp
       3                 :            : //
       4                 :            : // Purpose       : 
       5                 :            : //                 
       6                 :            : // Creator       : Tim Tautges
       7                 :            : //
       8                 :            : // Creation Date : 03/22/99
       9                 :            : //
      10                 :            : // Owner         : Darryl Melander
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : #include "TopologyBridge.hpp"
      13                 :            : #include "TopologyEntity.hpp"
      14                 :            : #include "DLIList.hpp"
      15                 :            : #include "BodySM.hpp"
      16                 :            : #include "Lump.hpp"
      17                 :            : #include "ShellSM.hpp"
      18                 :            : #include "Surface.hpp"
      19                 :            : #include "LoopSM.hpp"
      20                 :            : #include "Curve.hpp"
      21                 :            : #include "CoEdgeSM.hpp"
      22                 :            : #include "Point.hpp"
      23                 :            : #include "CubitSimpleAttrib.hpp"
      24                 :            : #include "BridgeManager.hpp"
      25                 :            : #include "TBOwner.hpp"
      26                 :            : #include "TBOwnerSet.hpp"
      27                 :            : #include "CADefines.hpp"
      28                 :            : 
      29                 :     105388 : TopologyBridge::~TopologyBridge()
      30                 :            : {
      31         [ +  + ]:     105388 :   if (bridgeOwner)
      32                 :     103001 :     bridgeOwner->bridge_destroyed(this);
      33         [ -  + ]:     105388 : }
      34                 :            : 
      35                 :     434574 : TopologyEntity* TopologyBridge::topology_entity() const
      36                 :            : {
      37                 :     434574 :   BridgeManager* bridgeManager = bridge_manager();
      38         [ +  + ]:     434574 :   if (bridgeManager)
      39                 :     264591 :     return bridgeManager->topology_entity();
      40                 :            :   else
      41                 :     169983 :     return NULL;
      42                 :            : }
      43                 :            : 
      44                 :         11 : BodySM *TopologyBridge::bodysm()
      45                 :            : {
      46         [ +  - ]:         11 :   DLIList<BodySM*> bodies;
      47         [ +  - ]:         11 :   bodysms(bodies);
      48 [ +  - ][ +  - ]:         11 :   if (bodies.size() > 0) return bodies.get();
                 [ +  - ]
      49         [ +  - ]:         11 :   else return NULL;
      50                 :            : }
      51                 :            : 
      52                 :          0 : Lump *TopologyBridge::lump()
      53                 :            : {
      54         [ #  # ]:          0 :   DLIList<Lump*> lump_list;
      55         [ #  # ]:          0 :   lumps(lump_list);
      56 [ #  # ][ #  # ]:          0 :   if (lump_list.size() > 0) return lump_list.get();
                 [ #  # ]
      57         [ #  # ]:          0 :   else return NULL;
      58                 :            : }
      59                 :            : 
      60                 :            : 
      61                 :          0 : LoopSM *TopologyBridge::loopsm()
      62                 :            : {
      63         [ #  # ]:          0 :   DLIList<LoopSM*> loopsm_list;
      64         [ #  # ]:          0 :   loopsms(loopsm_list);
      65 [ #  # ][ #  # ]:          0 :   if (loopsm_list.size() > 0) return loopsm_list.get();
                 [ #  # ]
      66         [ #  # ]:          0 :   else return NULL;
      67                 :            : }
      68                 :            : 
      69                 :            : 
      70                 :            : 
      71                 :            : 
      72                 :         33 : void TopologyBridge::bodysms( DLIList<BodySM*>& bodies, bool unique )
      73                 :            : {
      74         [ +  - ]:         33 :   DLIList<TopologyBridge*> parents;
      75         [ -  + ]:         33 :   BodySM* this_body = dynamic_cast<BodySM*>(this);
      76         [ -  + ]:         33 :   if( this_body )
      77                 :            :   {
      78         [ #  # ]:          0 :     bodies.append( this_body );
      79                 :            :   }
      80 [ +  - ][ +  + ]:         33 :   else if( dynamic_cast<Lump*>(this) )
      81                 :            :   {
      82         [ +  - ]:         11 :     get_parents( parents );
      83         [ +  - ]:         11 :     parents.reset();
      84 [ +  - ][ +  + ]:         22 :     for ( int i = parents.size(); i--; )
      85 [ +  - ][ -  + ]:         22 :       bodies.append (dynamic_cast<BodySM*>(parents.get_and_step()));
                 [ +  - ]
      86                 :            :   }
      87                 :            :   else
      88                 :            :   {
      89         [ +  - ]:         22 :     get_parents( parents );
      90 [ +  - ][ +  + ]:         44 :     for( int i = parents.size(); i--; )
      91 [ +  - ][ +  - ]:         22 :       parents.get_and_step()->bodysms( bodies, false );
      92                 :            :     
      93         [ +  + ]:         22 :     if (unique)
      94         [ +  - ]:         11 :       bodies.uniquify_ordered();
      95         [ +  - ]:         33 :   }
      96                 :         33 : }
      97                 :            :     
      98                 :       7698 : void TopologyBridge::lumps( DLIList<Lump*>& lumps, bool unique )
      99                 :            : {
     100         [ +  - ]:       7698 :   DLIList<TopologyBridge*> related;
     101         [ -  + ]:       7698 :   Lump* this_lump = dynamic_cast<Lump*>(this);
     102         [ -  + ]:       7698 :   if( this_lump )
     103                 :            :   {
     104         [ #  # ]:          0 :     lumps.append( this_lump );
     105                 :            :   }
     106 [ +  - ][ +  - ]:       7698 :   else if( dynamic_cast<BodySM*>(this) )
     107                 :            :   {
     108         [ +  - ]:       7698 :     get_children( related );
     109         [ +  - ]:       7698 :     related.reset();
     110 [ +  - ][ +  + ]:      16026 :     for ( int i = related.size(); i--; )
     111 [ +  - ][ -  + ]:      16026 :       lumps.append( dynamic_cast<Lump*>(related.get_and_step()) );
                 [ +  - ]
     112                 :            :   }
     113 [ #  # ][ #  # ]:          0 :   else if( dynamic_cast<ShellSM*>(this) )
     114                 :            :   {
     115         [ #  # ]:          0 :     get_parents( related );
     116         [ #  # ]:          0 :     related.reset();
     117 [ #  # ][ #  # ]:          0 :     for ( int i = related.size(); i--; )
     118 [ #  # ][ #  # ]:          0 :       lumps.append( dynamic_cast<Lump*>(related.get_and_step()) );
                 [ #  # ]
     119                 :            :   }
     120                 :            :   else
     121                 :            :   {
     122         [ #  # ]:          0 :     get_parents( related );
     123 [ #  # ][ #  # ]:          0 :     for( int i = related.size(); i--; )
     124 [ #  # ][ #  # ]:          0 :       related.get_and_step()->lumps( lumps, false );
     125                 :            :       
     126         [ #  # ]:          0 :     if (unique)
     127         [ #  # ]:          0 :       lumps.uniquify_ordered();
     128         [ +  - ]:       7698 :   }
     129                 :       7698 : }
     130                 :            : 
     131                 :       3991 : void TopologyBridge::shellsms( DLIList<ShellSM*>& shells, bool unique )
     132                 :            : {
     133         [ +  - ]:       3991 :   DLIList<TopologyBridge*> related;
     134         [ -  + ]:       3991 :   ShellSM* this_shell = dynamic_cast<ShellSM*>(this);
     135         [ -  + ]:       3991 :   if( this_shell )
     136                 :            :   {
     137         [ #  # ]:          0 :     shells.append(this_shell);
     138                 :            :   }
     139 [ +  - ][ +  + ]:       3991 :   else if( dynamic_cast<Lump*>(this) )
     140                 :            :   {
     141         [ +  - ]:       3317 :     get_children( related );
     142         [ +  - ]:       3317 :     related.reset();
     143 [ +  - ][ +  + ]:       6694 :     for ( int i = related.size(); i--; )
     144 [ +  - ][ -  + ]:       6694 :       shells.append( dynamic_cast<ShellSM*>(related.get_and_step()) );
                 [ +  - ]
     145                 :            :   }
     146 [ +  - ][ +  - ]:        674 :   else if( dynamic_cast<Surface*>(this) )
     147                 :            :   {
     148         [ +  - ]:        674 :     get_parents( related );
     149         [ +  - ]:        674 :     related.reset();
     150 [ +  - ][ +  + ]:       1348 :     for ( int i = related.size(); i--; )
     151 [ +  - ][ -  + ]:       1348 :       shells.append( dynamic_cast<ShellSM*>(related.get_and_step()) );
                 [ +  - ]
     152                 :            :   }
     153 [ #  # ][ #  # ]:          0 :   else if( dynamic_cast<BodySM*>(this) )
     154                 :            :   {
     155         [ #  # ]:          0 :     get_children( related );
     156 [ #  # ][ #  # ]:          0 :     for ( int i = related.size(); i--; )
     157 [ #  # ][ #  # ]:          0 :       related.get_and_step()->shellsms( shells );
     158                 :            :   }
     159                 :            :   else 
     160                 :            :   {
     161         [ #  # ]:          0 :     get_parents( related );
     162                 :            :       
     163 [ #  # ][ #  # ]:          0 :     for( int i = related.size(); i--; )
     164 [ #  # ][ #  # ]:          0 :       related.get_and_step()->shellsms( shells, false );
     165                 :            :     
     166         [ #  # ]:          0 :     if ( unique )
     167         [ #  # ]:          0 :       shells.uniquify_ordered();
     168         [ +  - ]:       3991 :   }
     169                 :       3991 : }  
     170                 :            : 
     171                 :      25602 : void TopologyBridge::surfaces( DLIList<Surface*>& surfaces, bool unique )
     172                 :            : {
     173         [ +  - ]:      25602 :   DLIList<TopologyBridge*> related;
     174         [ -  + ]:      25602 :   Surface* this_surf = dynamic_cast<Surface*>(this);
     175         [ -  + ]:      25602 :   if( this_surf )
     176                 :            :   {
     177         [ #  # ]:          0 :     surfaces.append(this_surf);
     178                 :            :   }
     179 [ +  - ][ +  + ]:      25602 :   else if( dynamic_cast<LoopSM*>(this) )
     180                 :            :   {
     181         [ +  - ]:        369 :     get_parents( related );
     182         [ +  - ]:        369 :     related.reset();
     183 [ +  - ][ +  + ]:        738 :     for (int i = related.size(); i--; )
     184 [ +  - ][ -  + ]:        738 :       surfaces.append( dynamic_cast<Surface*>(related.get_and_step()) );
                 [ +  - ]
     185                 :            :   }
     186 [ +  - ][ +  + ]:      25233 :   else if( dynamic_cast<ShellSM*>(this) )
     187                 :            :   {
     188         [ +  - ]:      11572 :     get_children( related );
     189         [ +  - ]:      11572 :     related.reset();
     190 [ +  - ][ +  + ]:      78705 :     for (int i = related.size(); i--; )
     191 [ +  - ][ -  + ]:      78705 :       surfaces.append( dynamic_cast<Surface*>(related.get_and_step()) );
                 [ +  - ]
     192                 :            :   }
     193 [ +  - ][ +  + ]:      13661 :   else if ( dynamic_cast<BodySM*>(this) || dynamic_cast<Lump*>(this) )
         [ +  - ][ +  + ]
     194                 :            :   {
     195         [ +  - ]:      13292 :     get_children(related);
     196         [ +  - ]:      13292 :     related.reset();
     197 [ +  - ][ +  + ]:      27362 :     for (int i = related.size(); i--; )
     198 [ +  - ][ +  - ]:      14070 :       related.get_and_step()->surfaces( surfaces, false );
     199                 :            :       
     200         [ +  + ]:      13292 :     if (unique)
     201         [ +  - ]:      13292 :       surfaces.uniquify_ordered();
     202                 :            :   }
     203                 :            :   else
     204                 :            :   {
     205         [ +  - ]:        369 :     get_parents(related);
     206         [ +  - ]:        369 :     related.reset();
     207 [ +  - ][ +  + ]:        738 :     for (int i = related.size(); i--; )
     208 [ +  - ][ +  - ]:        369 :       related.get_and_step()->surfaces( surfaces, false );
     209                 :            : 
     210 [ +  - ][ +  - ]:        369 :     if (unique && !dynamic_cast<CoEdgeSM*>(this))
                 [ -  + ]
     211         [ #  # ]:          0 :       related.uniquify_ordered();
     212         [ +  - ]:      25602 :   }
     213                 :      25602 : }  
     214                 :            : 
     215                 :      38036 : void TopologyBridge::loopsms( DLIList<LoopSM*>& loops, bool unique )
     216                 :            : {
     217         [ +  - ]:      38036 :   DLIList<TopologyBridge*> related;
     218                 :            :   
     219         [ -  + ]:      38036 :   LoopSM* this_loop = dynamic_cast<LoopSM*>(this);
     220         [ -  + ]:      38036 :   if( this_loop )
     221                 :            :   {
     222         [ #  # ]:          0 :     loops.append(this_loop);
     223                 :            :   }
     224 [ +  - ][ +  + ]:      38036 :   else if( dynamic_cast<CoEdgeSM*>(this ) )
     225                 :            :   {
     226         [ +  - ]:         82 :     get_parents( related );
     227         [ +  - ]:         82 :     related.reset();
     228 [ +  - ][ +  + ]:        164 :     for (int i = related.size(); i--; )
     229 [ +  - ][ -  + ]:        164 :       loops.append( dynamic_cast<LoopSM*>(related.get_and_step()) );
                 [ +  - ]
     230                 :            :   }
     231 [ +  - ][ +  - ]:      37954 :   else if( dynamic_cast<Surface*>(this) )
     232                 :            :   {
     233         [ +  - ]:      37954 :     get_children( related );
     234         [ +  - ]:      37954 :     related.reset();
     235 [ +  - ][ +  + ]:      78222 :     for (int i = related.size(); i--; )
     236 [ +  - ][ -  + ]:      78222 :       loops.append( dynamic_cast<LoopSM*>(related.get_and_step()) );
                 [ +  - ]
     237                 :            :   }
     238                 :            :   else
     239                 :            :   {
     240 [ #  # ][ #  # ]:          0 :     if( dynamic_cast<Curve*>(this) || dynamic_cast<TBPoint*>(this) )
         [ #  # ][ #  # ]
     241         [ #  # ]:          0 :       get_parents( related );
     242                 :            :     else
     243         [ #  # ]:          0 :       get_children( related );
     244                 :            :       
     245         [ #  # ]:          0 :     related.reset();
     246 [ #  # ][ #  # ]:          0 :     for( int i = related.size(); i--; )
     247 [ #  # ][ #  # ]:          0 :       related.get_and_step()->loopsms( loops, false );
     248                 :            :     
     249         [ #  # ]:          0 :     if (unique)
     250         [ #  # ]:          0 :       loops.uniquify_ordered();
     251         [ +  - ]:      38036 :   }
     252                 :      38036 : }  
     253                 :            : 
     254                 :            : 
     255                 :      40432 : void TopologyBridge::coedgesms( DLIList<CoEdgeSM*>& coedges, bool unique )
     256                 :            : {
     257         [ +  - ]:      40432 :   DLIList<TopologyBridge*> related;
     258                 :            :   
     259         [ -  + ]:      40432 :   CoEdgeSM* this_coedge = dynamic_cast<CoEdgeSM*>(this);
     260         [ -  + ]:      40432 :   if( this_coedge )
     261                 :            :   {
     262         [ #  # ]:          0 :     coedges.append(this_coedge);
     263                 :            :   }
     264 [ +  - ][ +  + ]:      40432 :   else if( dynamic_cast<Curve*>(this) )
     265                 :            :   {
     266         [ +  - ]:        164 :     get_parents( related );
     267         [ +  - ]:        164 :     related.reset();
     268 [ +  - ][ +  + ]:        492 :     for (int i = related.size(); i--; )
     269 [ +  - ][ -  + ]:        492 :       coedges.append( dynamic_cast<CoEdgeSM*>(related.get_and_step()) );
                 [ +  - ]
     270                 :            :   }
     271 [ +  - ][ +  - ]:      40268 :   else if( dynamic_cast<LoopSM*>(this) )
     272                 :            :   {
     273         [ +  - ]:      40268 :     get_children( related );
     274         [ +  - ]:      40268 :     related.reset();
     275 [ +  - ][ +  + ]:     193764 :     for (int i = related.size(); i--; )
     276 [ +  - ][ -  + ]:     193764 :       coedges.append( dynamic_cast<CoEdgeSM*>(related.get_and_step()) );
                 [ +  - ]
     277                 :            :   }
     278                 :            :   else
     279                 :            :   {
     280 [ #  # ][ #  # ]:          0 :     if( dynamic_cast<TBPoint*>(this) )
     281         [ #  # ]:          0 :       get_parents( related );
     282                 :            :     else
     283         [ #  # ]:          0 :       get_children( related );
     284                 :            :     
     285         [ #  # ]:          0 :     related.reset();  
     286 [ #  # ][ #  # ]:          0 :     for( int i = related.size(); i--; )
     287 [ #  # ][ #  # ]:          0 :       related.get_and_step()->coedgesms(coedges, false);
     288                 :            :     
     289         [ #  # ]:          0 :     if (unique)
     290         [ #  # ]:          0 :       coedges.uniquify_ordered();
     291         [ +  - ]:      40432 :   }
     292                 :      40432 : }  
     293                 :            : 
     294                 :          0 : void TopologyBridge::curves_ignore_virtual( DLIList<Curve*>& curves, bool unique )
     295                 :            : {
     296                 :            :   int i;
     297 [ #  # ][ #  # ]:          0 :   if(dynamic_cast<BodySM*>(this))
     298                 :            :   {
     299         [ #  # ]:          0 :     DLIList<TopologyBridge*> lumps;
     300         [ #  # ]:          0 :     this->get_children_virt(lumps);
     301 [ #  # ][ #  # ]:          0 :     for(i=lumps.size(); i>0; i--)
     302 [ #  # ][ #  # ]:          0 :       lumps.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     303                 :            :   }
     304 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<Lump*>(this))
     305                 :            :   {
     306         [ #  # ]:          0 :     DLIList<TopologyBridge*> shells;
     307         [ #  # ]:          0 :     this->get_children_virt(shells);
     308 [ #  # ][ #  # ]:          0 :     for(i=shells.size(); i>0; i--)
     309 [ #  # ][ #  # ]:          0 :       shells.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     310                 :            :   }
     311 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<ShellSM*>(this))
     312                 :            :   {
     313         [ #  # ]:          0 :     DLIList<TopologyBridge*> surfs;
     314         [ #  # ]:          0 :     this->get_children_virt(surfs);
     315 [ #  # ][ #  # ]:          0 :     for(i=surfs.size(); i>0; i--)
     316 [ #  # ][ #  # ]:          0 :       surfs.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     317                 :            :   }
     318 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<Surface*>(this))
     319                 :            :   {
     320         [ #  # ]:          0 :     DLIList<TopologyBridge*> loops;
     321         [ #  # ]:          0 :     this->get_children_virt(loops);
     322 [ #  # ][ #  # ]:          0 :     for(i=loops.size(); i>0; i--)
     323 [ #  # ][ #  # ]:          0 :       loops.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     324                 :            :   }
     325 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<LoopSM*>(this))
     326                 :            :   {
     327         [ #  # ]:          0 :     DLIList<TopologyBridge*> coedges;
     328         [ #  # ]:          0 :     this->get_children_virt(coedges);
     329 [ #  # ][ #  # ]:          0 :     for(i=coedges.size(); i>0; i--)
     330 [ #  # ][ #  # ]:          0 :       coedges.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     331                 :            :   }
     332 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<CoEdgeSM*>(this))
     333                 :            :   {
     334         [ #  # ]:          0 :     DLIList<TopologyBridge*> tmp_curves;
     335         [ #  # ]:          0 :     this->get_children_virt(tmp_curves);
     336 [ #  # ][ #  # ]:          0 :     for(i=tmp_curves.size(); i>0; i--)
     337 [ #  # ][ #  # ]:          0 :       tmp_curves.get_and_step()->curves_ignore_virtual(curves, unique);
                 [ #  # ]
     338                 :            :   }
     339 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<Curve*>(this))
     340                 :            :   {
     341 [ #  # ][ #  # ]:          0 :     curves.append(dynamic_cast<Curve*>(this));
     342                 :            :   }
     343         [ #  # ]:          0 :   if(unique)
     344                 :          0 :     curves.uniquify_ordered();
     345                 :          0 : }
     346                 :            : 
     347                 :          0 : void TopologyBridge::surfaces_ignore_virtual( DLIList<Surface*>& surfaces, bool unique )
     348                 :            : {
     349                 :            :   int i;
     350 [ #  # ][ #  # ]:          0 :   if(dynamic_cast<BodySM*>(this))
     351                 :            :   {
     352         [ #  # ]:          0 :     DLIList<TopologyBridge*> lumps;
     353         [ #  # ]:          0 :     this->get_children_virt(lumps);
     354 [ #  # ][ #  # ]:          0 :     for(i=lumps.size(); i>0; i--)
     355 [ #  # ][ #  # ]:          0 :       lumps.get_and_step()->surfaces_ignore_virtual(surfaces, unique);
                 [ #  # ]
     356                 :            :   }
     357 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<Lump*>(this))
     358                 :            :   {
     359         [ #  # ]:          0 :     DLIList<TopologyBridge*> shells;
     360         [ #  # ]:          0 :     this->get_children_virt(shells);
     361 [ #  # ][ #  # ]:          0 :     for(i=shells.size(); i>0; i--)
     362 [ #  # ][ #  # ]:          0 :       shells.get_and_step()->surfaces_ignore_virtual(surfaces, unique);
                 [ #  # ]
     363                 :            :   }
     364 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<ShellSM*>(this))
     365                 :            :   {
     366         [ #  # ]:          0 :     DLIList<TopologyBridge*> surfs;
     367         [ #  # ]:          0 :     this->get_children_virt(surfs);
     368 [ #  # ][ #  # ]:          0 :     for(i=surfs.size(); i>0; i--)
     369 [ #  # ][ #  # ]:          0 :       surfs.get_and_step()->surfaces_ignore_virtual(surfaces, unique);
                 [ #  # ]
     370                 :            :   }
     371 [ #  # ][ #  # ]:          0 :   else if(dynamic_cast<Surface*>(this))
     372                 :            :   {
     373 [ #  # ][ #  # ]:          0 :     surfaces.append(dynamic_cast<Surface*>(this));
     374                 :            :   }
     375         [ #  # ]:          0 :   if(unique)
     376                 :          0 :     surfaces.uniquify_ordered();
     377                 :          0 : }
     378                 :            : 
     379                 :     479923 : void TopologyBridge::curves( DLIList<Curve*>& curves, bool unique )
     380                 :            : {
     381         [ +  - ]:     479923 :   DLIList<TopologyBridge*> related;
     382                 :            :   
     383         [ -  + ]:     479923 :   Curve* this_curve = dynamic_cast<Curve*>(this);
     384         [ -  + ]:     479923 :   if( this_curve )
     385                 :            :   {
     386         [ #  # ]:          0 :     curves.append(this_curve);
     387                 :            :   }
     388 [ +  - ][ -  + ]:     479923 :   else if( dynamic_cast<TBPoint*>(this) )
     389                 :            :   {
     390         [ #  # ]:          0 :     get_parents( related );
     391         [ #  # ]:          0 :     related.reset();
     392 [ #  # ][ #  # ]:          0 :     for (int i = related.size(); i--; )
     393 [ #  # ][ #  # ]:          0 :       curves.append( dynamic_cast<Curve*>(related.get_and_step()) );
                 [ #  # ]
     394                 :            :   }
     395 [ +  - ][ +  + ]:     479923 :   else if( dynamic_cast<CoEdgeSM*>(this) )
     396                 :            :   {
     397         [ +  - ]:     358998 :     get_children( related );
     398         [ +  - ]:     358998 :     related.reset();
     399 [ +  - ][ +  + ]:     717996 :     for (int i = related.size(); i--; )
     400 [ +  - ][ -  + ]:     717996 :       curves.append( dynamic_cast<Curve*>(related.get_and_step()) );
                 [ +  - ]
     401                 :            :   }
     402                 :            :   else
     403                 :            :   {
     404         [ +  - ]:     120925 :     get_children( related );
     405                 :            :     
     406         [ +  - ]:     120925 :     related.reset();
     407 [ +  - ][ +  + ]:     426089 :     for (int i = related.size(); i--; )
     408 [ +  - ][ +  - ]:     305164 :       related.get_and_step()->curves (curves, false);
     409                 :            :     
     410         [ +  + ]:     120925 :     if (unique)
     411         [ +  - ]:      21181 :       curves.uniquify_ordered();
     412         [ +  - ]:     479923 :   }
     413                 :     479923 : }  
     414                 :            : 
     415                 :     227900 : void TopologyBridge::points( DLIList<TBPoint*>& points, bool unique )
     416                 :            : {
     417         [ +  - ]:     227900 :   DLIList<TopologyBridge*> children;
     418                 :            :   
     419         [ -  + ]:     227900 :   TBPoint* this_point = dynamic_cast<TBPoint*>(this);
     420         [ -  + ]:     227900 :   if( this_point )
     421                 :            :   {
     422         [ #  # ]:          0 :     points.append(this_point);
     423                 :            :   }
     424 [ +  - ][ +  + ]:     227900 :   else if( dynamic_cast<Curve*>(this) )
     425                 :            :   {
     426         [ +  - ]:     135283 :     get_children( children );
     427         [ +  - ]:     135283 :     children.reset();
     428 [ +  - ][ +  + ]:     400708 :     for (int i = children.size(); i--; )
     429 [ +  - ][ -  + ]:     400708 :       points.append( dynamic_cast<TBPoint*>(children.get_and_step()) );
                 [ +  - ]
     430                 :            :   }
     431                 :            :   else
     432                 :            :   {
     433         [ +  - ]:      92617 :     get_children( children );
     434                 :            :       
     435 [ +  - ][ +  + ]:     240990 :     for( int i = children.size(); i--; )
     436 [ +  - ][ +  - ]:     148373 :       children.get_and_step()->points(points, false);
     437                 :            :     
     438         [ +  + ]:      92617 :     if (unique)
     439         [ +  - ]:       1955 :       points.uniquify_ordered();
     440         [ +  - ]:     227900 :   }
     441                 :     227900 : }  
     442                 :            : 
     443                 :     666635 : BridgeManager* TopologyBridge::bridge_manager() const
     444         [ +  + ]:     666635 : { return dynamic_cast<BridgeManager*>(bridgeOwner); }
     445                 :            : 
     446                 :          0 : void TopologyBridge::bridge_manager( BridgeManager* manager )
     447                 :          0 : { bridgeOwner = manager; }
     448                 :            : 
     449                 :      25029 : void TopologyBridge::get_parents( DLIList<TopologyBridge*>& parents )
     450                 :            : {
     451                 :      25029 :   parents.clean_out();
     452                 :      25029 :   get_parents_virt( parents );
     453         [ +  + ]:      68629 :   for ( int i = parents.size(); i--; )
     454                 :            :   {
     455                 :      43600 :     TopologyBridge* tb_ptr = parents.step_and_get();
     456         [ +  + ]:      43600 :     TBOwnerSet* partition_body = dynamic_cast<TBOwnerSet*>(tb_ptr->owner());
     457         [ -  + ]:      43600 :     if ( partition_body )
     458                 :            :     {
     459         [ #  # ]:          0 :       DLIList<TopologyBridge*> owner_list;
     460         [ #  # ]:          0 :       partition_body->get_owners(owner_list);
     461 [ #  # ][ #  # ]:          0 :       assert(owner_list.size() == 1);
     462 [ #  # ][ #  # ]:          0 :       parents.change_to(owner_list.get());
                 [ #  # ]
     463                 :            :     }
     464                 :            :   }
     465                 :      25029 : }
     466                 :            : 
     467                 :            : /*
     468                 :            : void TopologyBridge::get_parents( DLIList<TopologyBridge*>& parents,
     469                 :            :                                   int layer, bool return_hidden )
     470                 :            : {
     471                 :            :   assert( this->layer() <= layer );
     472                 :            :   DLIList<TopologyBridge*> parents_real;
     473                 :            :   get_parents_virt( parents_real );
     474                 :            :   while( parents_real.size() )
     475                 :            :   {
     476                 :            :       // order of parent lists not important (i.e. okay if 
     477                 :            :       // result list is reverse of parents_real.)
     478                 :            :     TopologyBridge* parent_real = parents_real.pop();
     479                 :            :     TBOwner* owner = parent_real->owner();
     480                 :            : 
     481                 :            :     TBOwnerSet* set = 0;
     482                 :            :     TopologyBridge* composite = 0;
     483                 :            : 
     484                 :            :     if( !owner || dynamic_cast<BridgeManager*>(owner) )
     485                 :            :     {
     486                 :            :       parents.append_unique( parent_real );
     487                 :            :     }
     488                 :            :     else if( set = dynamic_cast<TBOwnerSet*>(owner) )
     489                 :            :     {
     490                 :            :       if( set->get_owner_layer() > layer )
     491                 :            :       {
     492                 :            :         parents.append_unique( parent_real );
     493                 :            :       }
     494                 :            :       else
     495                 :            :       {
     496                 :            :         DLIList<TopologyBridge*> bridge_set, children;
     497                 :            :         set->get_owners( bridge_set );
     498                 :            :         for( int i = bridge_set.size(); i--; )
     499                 :            :         {
     500                 :            :           TopologyBridge* partition = bridge_set.get_and_step();
     501                 :            :           children.clean_out();
     502                 :            :           partition->get_children_virt( children );
     503                 :            :           if( children.is_in_list( this ) )
     504                 :            :             parents_real.append_unique( partition );
     505                 :            :         }
     506                 :            :       }
     507                 :            :     }
     508                 :            :     else if( composite = dynamic_cast<TopologyBridge*>(owner) )
     509                 :            :     {
     510                 :            :       if( composite->layer() > layer )
     511                 :            :         parents.append_unique(parent_real);
     512                 :            :       else
     513                 :            :         parents_real.append_unique( composite );
     514                 :            :     }
     515                 :            :     else if( return_hidden )
     516                 :            :     {
     517                 :            :       parents.append( parent_real );
     518                 :            :     }
     519                 :            :     else
     520                 :            :     {
     521                 :            :       ; // Do nothing.  This entity is hidden by some composite.
     522                 :            :     }
     523                 :            :   }
     524                 :            : }
     525                 :            : */
     526                 :            :             
     527                 :     840379 : void TopologyBridge::get_children( DLIList<TopologyBridge*>& children,
     528                 :            :                                    bool return_hidden, int layer )
     529                 :            : {
     530 [ +  - ][ -  + ]:     840379 :   assert(this->layer() <= layer);
     531                 :            :   
     532 [ +  - ][ +  + ]:    5042274 :   DLIList<TopologyBridge*> child_list[2], partitions;
         [ +  - ][ +  - ]
           [ +  -  #  # ]
     533                 :     840379 :   int current = 0;
     534                 :            :   
     535         [ +  - ]:     840379 :   get_children_virt( child_list[current] );
     536                 :            :   // Note: be careful to return result list in the same order
     537                 :            :   // as the child list we got above.
     538                 :            :   
     539                 :     840379 :   bool done = false;
     540         [ +  + ]:    1680758 :   while( !done )
     541                 :            :   {
     542                 :     840379 :     done = true;
     543                 :            :     
     544                 :     840379 :     int next = 1 - current;
     545         [ +  - ]:     840379 :     child_list[current].reset();
     546         [ +  - ]:     840379 :     child_list[next].clean_out();
     547 [ +  - ][ +  + ]:    2244995 :     for( int i = child_list[current].size(); i--; )
     548                 :            :     {
     549         [ +  - ]:    1404616 :       TopologyBridge* child = child_list[current].get_and_step();
     550         [ +  - ]:    1404616 :       TBOwner* owner = child->owner();
     551                 :            :       
     552                 :    1404616 :       TopologyBridge* composite = 0;
     553                 :    1404616 :       TBOwnerSet* partition = 0;
     554                 :            :       
     555 [ +  + ][ +  - ]:    1404616 :       if( !owner || dynamic_cast<BridgeManager*>(owner) )
         [ +  - ][ +  - ]
     556                 :            :       {
     557         [ +  - ]:    1404616 :         child_list[next].append( child );
     558                 :            :       }
     559 [ #  # ][ #  # ]:          0 :       else if( (partition = dynamic_cast<TBOwnerSet*>(owner) ) != NULL )
     560                 :            :       {
     561 [ #  # ][ #  # ]:          0 :         if( partition->get_owner_layer() > layer )
     562                 :            :         {
     563         [ #  # ]:          0 :           child_list[next].append(child);
     564                 :            :         }
     565                 :            :         else
     566                 :            :         {
     567                 :          0 :           done = false;
     568         [ #  # ]:          0 :           partitions.clean_out();
     569         [ #  # ]:          0 :           partition->get_owners( partitions );
     570         [ #  # ]:          0 :           partitions.reset();
     571         [ #  # ]:          0 :           child_list[next] += partitions;
     572                 :            :         }
     573                 :            :       }
     574 [ #  # ][ #  # ]:          0 :       else if( (composite = dynamic_cast<TopologyBridge*>(owner) ) != NULL )
     575                 :            :       {
     576 [ #  # ][ #  # ]:          0 :         if( composite->layer() > layer )
     577                 :            :         {
     578         [ #  # ]:          0 :            child_list[next].append(child);
     579                 :            :         }
     580                 :            :         else
     581                 :            :         {
     582                 :          0 :           done = false;
     583 [ #  # ][ #  # ]:          0 :           if( !child_list[current].is_in_list(composite) )
     584         [ #  # ]:          0 :             child_list[next].append_unique( composite );
     585                 :            :         }
     586                 :            :       }
     587         [ #  # ]:          0 :       else if( return_hidden )
     588                 :            :       {
     589         [ #  # ]:    1404616 :         child_list[next].append( child );
     590                 :            :       }
     591                 :            :       else
     592                 :            :       {
     593                 :            :         ; // Do nothing. This entity is hidden by some composite.
     594                 :            :       }
     595                 :            :     }
     596                 :            :       
     597                 :     840379 :     current = next;
     598                 :            :   }
     599                 :            :   
     600 [ +  - ][ +  + ]:    3361516 :   children = child_list[current];
                 [ #  # ]
     601 [ +  - ][ +  - ]:     846919 : }
                 [ #  # ]

Generated by: LCOV version 1.11