LCOV - code coverage report
Current view: top level - geom/cgm - DagType.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 38 44 86.4 %
Date: 2020-06-30 00:58:45 Functions: 24 27 88.9 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : #ifndef DAG_TYPE_HPP
       2                 :            : #define DAG_TYPE_HPP
       3                 :            : 
       4                 :            : 
       5                 :            : 
       6                 :            : class DagType
       7                 :            : {
       8                 :            : 
       9                 :            :   public:
      10                 :            :     
      11                 :            :     enum FunctionalType {
      12                 :            :       BasicTopologyEntity_TYPE = 0,
      13                 :            :       SenseEntity_TYPE = 1,
      14                 :            :       GroupingEntity_TYPE = 2 };
      15                 :            :   
      16                 :            :       // Constructor
      17                 :            :       // 
      18                 :            :       // Construct invalid DagType
      19                 :          0 :     inline DagType()
      20                 :          0 :       : intType(-1)
      21                 :          0 :       {}
      22                 :            :     
      23                 :            :       // Constructor
      24                 :            :       //
      25                 :            :       // GroupingEntities and SenseEntities have the same 
      26                 :            :       // dimension as their child BasicTopologyEntity type.
      27                 :            :       // Dimension may be outside the range [0,3], but
      28                 :            :       // if so is_valid() will return false.  (i.e. it is
      29                 :            :       // possible to construct invalid DagType objects.)
      30                 :    1508989 :     inline DagType( int dimensionIn, FunctionalType func )
      31                 :    1508989 :       : intType( 3 * dimensionIn + func ) 
      32                 :    1508989 :       { }
      33                 :            :     
      34                 :            :     
      35                 :            :       // Return the dimension of this type.  
      36                 :            :       //
      37                 :            :       // GroupingEntities and SenseEntities have the same 
      38                 :            :       // dimension as their child BasicTopologyEntity type.
      39                 :     129634 :     inline int dimension() const
      40                 :     129634 :       { return intType / 3; }
      41                 :            :       
      42                 :            :       // Return the base type of this subtype.
      43                 :            :       // 
      44                 :            :       // Return values are one of GroupingEntity_TYPE,
      45                 :            :       // SenseEntity_TYPE, or BasicTopologyEntity_TYPE.
      46                 :     125194 :     inline FunctionalType functional_type() const
      47                 :     125194 :       { return (FunctionalType)(intType % 3); }
      48                 :            :       
      49                 :            :     
      50                 :            :       // Is this a valid DagType?  
      51                 :            :       //
      52                 :            :       // An invalid type can be obtained by constructing
      53                 :            :       // a DagType object with a dimension not in the 
      54                 :            :       // range [0,3], or using the operators below to
      55                 :            :       // move above a Body or below a RefVertex in the DAG.
      56                 :    2024450 :     inline bool is_valid() const
      57                 :            :       { 
      58                 :    2024450 :         const unsigned bodyType = 11;
      59                 :    2024450 :         return (unsigned)intType <= bodyType;
      60                 :            :       }
      61                 :            :       
      62                 :            :       // get parent of this type
      63                 :     389253 :     inline DagType parent() const
      64                 :     389253 :       { return DagType(intType + 1); }
      65                 :            :     
      66                 :            :       
      67                 :            :       // Comparison Operators.
      68                 :            :       //
      69                 :            :       //   An entity higher in the DAG (closer to Body) is
      70                 :            :       //   considered greater than an entity lower in the
      71                 :            :       //   DAG (closer to RefVertex).    
      72                 :            : 
      73                 :       4366 :     inline bool operator==( DagType other ) const
      74                 :       4366 :       { return intType == other.intType; }
      75                 :            : 
      76                 :     396151 :     inline bool operator!=( DagType other ) const
      77                 :     396151 :       { return intType != other.intType; }
      78                 :            : 
      79                 :            :     inline bool operator<=( DagType other ) const
      80                 :            :       { return intType <= other.intType; }
      81                 :            : 
      82                 :          0 :     inline bool operator>=( DagType other ) const
      83                 :          0 :       { return intType >= other.intType; }
      84                 :            : 
      85                 :     814030 :     inline bool operator< ( DagType other ) const
      86                 :     814030 :       { return intType < other.intType; }
      87                 :            : 
      88                 :    2149586 :     inline bool operator> ( DagType other ) const
      89                 :    2149586 :       { return intType > other.intType; }
      90                 :            :     
      91                 :            : 
      92                 :            :       // Addition operators.
      93                 :            :       //
      94                 :            :       //  Increasing the value of the type moves the
      95                 :            :       //  type up the DAG (closer to Body).  No bounds
      96                 :            :       //  checking is done on the value.  Moving upwards
      97                 :            :       //  from Body or downwards past RefVertex results
      98                 :            :       //  in a DagType for which is_valid() returns false.
      99                 :            : 
     100                 :            :     inline DagType operator++()
     101                 :            :       { return DagType(++intType); }
     102                 :            : 
     103                 :            :     inline DagType operator--()
     104                 :            :       { return DagType(--intType); }
     105                 :            : 
     106                 :     204682 :     inline DagType operator++(int)
     107                 :     204682 :       { return DagType(intType++); }
     108                 :            : 
     109                 :     930118 :     inline DagType operator--(int)
     110                 :     930118 :       { return DagType(intType--); }
     111                 :            : 
     112                 :            :     inline DagType operator+=( int i )
     113                 :            :       { return DagType(intType += i); }
     114                 :            : 
     115                 :            :     inline DagType operator-=( int i )
     116                 :            :       { return DagType(intType -= i); }
     117                 :            :       
     118                 :            :     inline DagType operator+( int i ) const
     119                 :            :       { return DagType(intType + i); }
     120                 :            :       
     121                 :            :     inline DagType operator-( int i ) const
     122                 :            :       { return DagType(intType - i); }
     123                 :            : 
     124                 :            : 
     125                 :            :       // Cast to bool.
     126                 :            :       //
     127                 :            :       // Same as is_valid().
     128                 :            :     inline operator bool() const
     129                 :            :       { return is_valid(); }
     130                 :            :   
     131                 :            : 
     132                 :            :       // Get distance between types in DAG.
     133                 :            :       //
     134                 :            :       // Return value is negative if the passed type
     135                 :            :       // is higher (closer to Body) in the DAG than
     136                 :            :       // this type is.  The return value is 1 (one) 
     137                 :            :       // if the passed type is an immediate child of 
     138                 :            :       // this type.  The return value is 0 (zero) if
     139                 :            :       // the types are the same.
     140                 :            :     inline int operator-( DagType other ) const
     141                 :            :       { return intType - other.intType; } 
     142                 :            :   
     143                 :            :       // Constants
     144                 :     308774 : inline static DagType       body_type() {return DagType(3,GroupingEntity_TYPE);}
     145                 :      12502 : inline static DagType  co_volume_type() {return DagType(3,SenseEntity_TYPE);}
     146                 :      62952 : inline static DagType ref_volume_type() {return DagType(3,BasicTopologyEntity_TYPE);} 
     147                 :      46222 : inline static DagType      shell_type() {return DagType(2,GroupingEntity_TYPE);}
     148                 :     111662 : inline static DagType    co_face_type() {return DagType(2,SenseEntity_TYPE);}
     149                 :     427302 : inline static DagType   ref_face_type() {return DagType(2,BasicTopologyEntity_TYPE);}
     150                 :     203840 : inline static DagType       loop_type() {return DagType(1,GroupingEntity_TYPE);}
     151                 :     298614 : inline static DagType    co_edge_type() {return DagType(1,SenseEntity_TYPE);}
     152                 :     650216 : inline static DagType   ref_edge_type() {return DagType(1,BasicTopologyEntity_TYPE);}
     153                 :     522026 : inline static DagType      chain_type() {return DagType(0,GroupingEntity_TYPE);}
     154                 :    1064644 : inline static DagType  co_vertex_type() {return DagType(0,SenseEntity_TYPE);}
     155                 :     413716 : inline static DagType ref_vertex_type() {return DagType(0,BasicTopologyEntity_TYPE);}
     156                 :          0 : inline static DagType    invalid_type() {return DagType(-1);}
     157                 :            :   private:
     158                 :            :   
     159                 :    1524053 :     inline explicit DagType( int value )
     160                 :    1524053 :       : intType( value ) {}
     161                 :            :   
     162                 :            :     int intType;
     163                 :            : };
     164                 :            : 
     165                 :            : 
     166                 :            : #endif
     167                 :            : 

Generated by: LCOV version 1.11