LCOV - code coverage report
Current view: top level - util/cgm - TDUPtr.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 0 24 0.0 %
Date: 2020-06-30 00:58:45 Functions: 0 20 0.0 %
Branches: 0 34 0.0 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : TDUPtr.hpp
       3                 :            : //
       4                 :            : // Purpose       : Smart pointer that becomes NULL when pointed-to object
       5                 :            : //                 is destroted.
       6                 :            : //
       7                 :            : // Special Notes : Uses ToolData mechanism.  Pointed-to object must be
       8                 :            : //                 a ToolDataUser
       9                 :            : //
      10                 :            : // Creator       : Jason Kraftcheck
      11                 :            : //
      12                 :            : // Creation Date : 03/12/03
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : 
      15                 :            : /* Example Usage:
      16                 :            :   
      17                 :            :   TDUPtr<Battleship> my_ptr = new Battleship;
      18                 :            :   
      19                 :            :   // ...
      20                 :            :   // do some stuff
      21                 :            :   // ...
      22                 :            :   
      23                 :            :   if ( my_ptr == NULL ) 
      24                 :            :     PRINT_INFO("You sunk my Battleship!\n");
      25                 :            :   else
      26                 :            :     PRINT_INFO("Location: %d, %d\n", my_ptr->x(), my_ptr->y() );
      27                 :            : */
      28                 :            : 
      29                 :            : 
      30                 :            : #ifndef TDU_PTR_HPP
      31                 :            : #define TDU_PTR_HPP
      32                 :            : 
      33                 :            : #include "ToolData.hpp"
      34                 :            : #include "CubitMessage.hpp"
      35                 :            : #include "CGMUtilConfigure.h"
      36                 :            : 
      37                 :            :   // Base class for TDUPtr - used because TDUPtr is a template,
      38                 :            :   // so a common base type for all the template types is required.
      39                 :            : class TDUPtrListNode
      40                 :            : {
      41                 :            :   public:
      42                 :            : 
      43         [ #  # ]:          0 :   virtual ~TDUPtrListNode(){}
      44                 :            :   
      45                 :          0 :   inline TDUPtrListNode() : nextInTD(0) {}
      46                 :            :   
      47                 :            :   private:
      48                 :            :   
      49                 :            :   friend class TDPtr;
      50                 :            : 
      51                 :            :   virtual void nullify() = 0;
      52                 :            :   TDUPtrListNode* nextInTD;
      53                 :            : };
      54                 :            : 
      55                 :            :   // The actuall pointer class -- this is the one you
      56                 :            :   // should be using.
      57                 :            : template <class T> class TDUPtr : public TDUPtrListNode
      58                 :            : {
      59                 :            : public:
      60                 :            : 
      61                 :            :   inline TDUPtr() : ptrTo(0) {}
      62                 :            :   
      63                 :          0 :   inline TDUPtr( T* ptr ) : ptrTo(0)
      64 [ #  # ][ #  # ]:          0 :     { change_ptr(ptr); }
      65                 :            : 
      66                 :          0 :   inline TDUPtr( const TDUPtr<T>& copy ) : TDUPtrListNode(), ptrTo(0)
      67 [ #  # ][ #  # ]:          0 :     { change_ptr(copy.ptrTo); }
      68                 :            :   
      69                 :          0 :   inline virtual ~TDUPtr() 
      70 [ #  # ][ #  # ]:          0 :     { change_ptr(0); }
         [ #  # ][ #  # ]
      71                 :            :   
      72                 :            :   inline T& operator*() const   { return *ptrTo; }
      73                 :            :   inline T* operator->() const  { return ptrTo; }
      74                 :          0 :   inline operator bool() const { return ptrTo != 0; }
      75                 :            :   
      76                 :          0 :   inline TDUPtr<T>& operator=( const TDUPtr<T>& copy )
      77                 :          0 :     { change_ptr(copy.ptrTo); return *this; }
      78                 :            :     
      79                 :            :   inline TDUPtr<T>& operator=( T* ptr )
      80                 :            :     { change_ptr(ptr); return *this; }
      81                 :            :   
      82                 :            :   inline bool operator==( const TDUPtr<T>& other ) const
      83                 :            :     { return ptrTo == other.ptrTo; }
      84                 :            :   inline bool operator!=( const TDUPtr<T>& other ) const
      85                 :            :     { return ptrTo != other.ptrTo; }
      86                 :            :   inline bool operator==( const T* ptr ) const
      87                 :            :     { return ptrTo == ptr; }
      88                 :            :   inline bool operator!=( const T* ptr ) const
      89                 :            :     { return ptrTo != ptr; }
      90                 :            : 
      91                 :            :   inline void change_ptr( T* ptr );
      92                 :            :   
      93                 :          0 :   inline T* ptr() const
      94                 :          0 :     { return ptrTo; }
      95                 :            : 
      96                 :            : private:
      97                 :            : 
      98                 :          0 :   virtual void nullify()
      99                 :          0 :     { ptrTo = 0; }
     100                 :            : 
     101                 :            :   T* ptrTo;
     102                 :            : 
     103                 :            : };
     104                 :            : 
     105                 :            :   // The ToolData used to associate pointer objects with TDU.
     106                 :            : class CUBIT_UTIL_EXPORT TDPtr : public ToolData
     107                 :            : {
     108                 :            : public:
     109                 :            :   static void add_to_TD( TDUPtrListNode* add, ToolDataUser* to );
     110                 :            :   static void remove_from_TD( TDUPtrListNode* remove, ToolDataUser* from );
     111                 :            :   
     112                 :            :   virtual ~TDPtr();
     113                 :            :   
     114                 :            : private:
     115                 :            : 
     116                 :          0 :   inline TDPtr() : listHead(0) { }
     117                 :            :   
     118                 :          0 :   static int is_ptr( const ToolData* td )
     119 [ #  # ][ #  # ]:          0 :     { return dynamic_cast<const TDPtr*>(td) != 0; }
     120                 :            :   
     121                 :            :   TDUPtrListNode* listHead;
     122                 :            : };
     123                 :            : 
     124                 :          0 : template <class T> inline void TDUPtr<T>::change_ptr( T* ptr )
     125                 :            : {
     126 [ #  # ][ #  # ]:          0 :   if( ptr != ptrTo ) 
     127                 :            :   {
     128 [ #  # ][ #  # ]:          0 :     TDPtr::remove_from_TD(this, ptrTo);
     129                 :          0 :     ptrTo = ptr;
     130 [ #  # ][ #  # ]:          0 :     TDPtr::add_to_TD(this, ptrTo);
     131                 :            :   }
     132                 :          0 : }
     133                 :            : 
     134                 :            : 
     135                 :            : #endif
     136                 :            : 

Generated by: LCOV version 1.11