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