lib Library API Documentation

koscript_ptr.h

00001 /* This class is property of Troll Tech. It's here temporarily
00002    until it appears in Qt's CVS
00003 */
00004 
00005 #ifndef __KSCRIPT_PTR_H__
00006 #define __KSCRIPT_PTR_H__
00007 
00008 #include <qshared.h>
00009 
00018 template< class T >
00019 struct KSSharedPtr
00020 {
00021 public:
00022   KSSharedPtr() { ptr = 0; }
00023   KSSharedPtr( T* t ) { ptr = t; /* ptr->ref(); */ }
00024   KSSharedPtr( const KSSharedPtr& p ) { ptr = p.ptr; if ( ptr ) ptr->ref(); }
00025   ~KSSharedPtr() { if ( ptr && ptr->deref() ) delete ptr; }
00026 
00027   KSSharedPtr<T>& operator= ( const KSSharedPtr<T>& p ) {
00028     if ( ptr && ptr->deref() ) delete ptr;
00029     ptr = p.ptr; if ( ptr ) ptr->ref();
00030     return *this;
00031   }
00032   KSSharedPtr<T>& operator= ( T* p ) {
00033     if ( ptr && ptr->deref() ) delete ptr;
00034     ptr = p; /* ptr->ref(); */
00035     return *this;
00036   }
00037   bool operator== ( const KSSharedPtr<T>& p ) const { return ( ptr == p.ptr ); }
00038   bool operator!= ( const KSSharedPtr<T>& p ) const { return ( ptr != p.ptr ); }
00039   bool operator== ( const T& p ) const { return ( ptr == &p ); }
00040   bool operator!= ( const T& p ) const { return ( ptr != &p ); }
00041   bool operator!() const { return ( ptr == 0 ); }
00042   operator bool() const { return ( ptr != 0 ); }
00043   operator bool() { return (ptr != 0); }
00044   operator T*() { return ptr; }
00045   operator T*() const { return (T*)ptr; }
00046 
00047   const T& operator*() const { return *ptr; }
00048   T& operator*() { return *ptr; }
00049   const T* operator->() const { return ptr; }
00050   T* operator->() { return ptr; }
00051 
00052   uint count() const { return ptr->count; } // for debugging purposes
00053   bool isNull() const { return ( ptr == 0 ); }
00054     
00055 private:
00056   T* ptr;
00057 };
00058 
00059 #endif
KDE Logo
This file is part of the documentation for lib Library Version 1.3.5.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Nov 17 13:19:25 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2003