koscript_ptr.h
00001
00002
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; }
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;
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; }
00053 bool isNull() const { return ( ptr == 0 ); }
00054
00055 private:
00056 T* ptr;
00057 };
00058
00059 #endif
This file is part of the documentation for lib Library Version 1.3.5.