⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointer.h

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 H
字号:
// This software is in the public domain.// There are no restrictions on any sort of usage of this software.#ifndef __SYSTEM_POINTER_H__#define __SYSTEM_POINTER_H__#define _P ::System::Pointer#ifdef DEBUG#ifdef MONA#include <monapi.h>#else#include <stdio.h>#include <stdlib.h>#endif#define __CHECK_NULL if (this->pointer == NULL) { \	::printf("ERROR: [Pointer] null reference exception\n"); ::exit(1); }#else#define __CHECK_NULL#endif#include <gui/System/Object.h>namespace System{	template <class T> struct Pointer	{	private:		T* pointer;		int* refCount;		bool hasRefCount;			inline void Initialize()		{			this->pointer  = 0 /*NULL*/;			this->refCount = 0 /*NULL*/;			this->hasRefCount = false;		}		public:		Pointer()		{			this->Initialize();		}			Pointer(T* pointer, bool isManaged)		{			this->Initialize();			this->Set(pointer, isManaged);		}			Pointer(const Pointer<T>& pointer)		{			this->Initialize();			this->Set(pointer);		}				Pointer(Object* pointer)		{			this->Initialize();			this->Set(pointer);		}			~Pointer()		{			this->Unset();		}				void Set(Object* pointer)		{			this->Unset();						this->pointer = (T*)pointer;			if (this->pointer == 0 /*NULL*/) return;						this->refCount = pointer->get_RefCountPtr();			(*this->refCount)++;		}			void Set(T* pointer, bool isManaged)		{			this->Unset();				this->pointer = pointer;			if (this->pointer != 0 /*NULL*/ && isManaged)			{				this->refCount = new int(1);				this->hasRefCount = true;			}		}			void Set(const Pointer<T>& pointer)		{			this->Unset();				this->pointer  = pointer.pointer;			this->refCount = pointer.refCount;			this->hasRefCount = pointer.hasRefCount;			if (this->refCount != 0 /*NULL*/) (*this->refCount)++;		}			void Clear()		{			this->Initialize();		}			void Unset()		{			if (this->refCount != 0 /*NULL*/)			{				(*this->refCount)--;				if (*this->refCount < 1)				{					if (this->hasRefCount) delete this->refCount;					this->refCount = 0 /*NULL*/;					delete this->pointer;				}				else				{					this->refCount = 0 /*NULL*/;				}				this->pointer = 0 /*NULL*/;			}		}			inline T* operator ->() { __CHECK_NULL return this->pointer; }		inline T* get() { return this->pointer; }		inline int get_RefCount() const { return this->refCount != 0 /*NULL*/ ? *this->refCount : -1; }			inline bool operator ==(T* arg) const { return this->pointer == arg; }		inline bool operator !=(T* arg) const { return this->pointer != arg; }		inline bool operator ==(const Pointer<T>& arg) const { return this->pointer == arg.pointer; }		inline bool operator !=(const Pointer<T>& arg) const { return this->pointer != arg.pointer; }			inline Pointer<T>& operator =(Object* pointer)		{			this->Set(pointer);			return *this;		}			inline Pointer<T>& operator =(const Pointer<T>& pointer)		{			this->Set(pointer);			return *this;		}	};}#endif  // __SYSTEM_POINTER_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -