EHS/include/ehs/ShdPtr.h
karutoh 1a4a1ecd9c
Some checks failed
Build & Release / Linux-x86_64-Build (push) Successful in 40s
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
First commit.
2024-01-31 22:28:19 -08:00

121 lines
1.5 KiB
C++

#pragma once
#include "PtrData.h"
namespace ehs
{
template<typename T>
class ShdPtr
{
private:
T* data;
public:
~ShdPtr()
{
if (RemovePtrData(data))
delete data;
}
ShdPtr()
: data(nullptr)
{
}
ShdPtr(T* data)
: data(data)
{
AddPtrData(data);
}
ShdPtr(ShdPtr&& shdPtr) noexcept
: data(shdPtr.data)
{
shdPtr.data = nullptr;
}
ShdPtr(const ShdPtr& shdPtr)
: data(shdPtr.data)
{
AddPtrData(data);
}
ShdPtr& operator=(ShdPtr&& shdPtr) noexcept
{
if (this == &shdPtr)
return *this;
if (RemovePtrData(data))
delete data;
data = shdPtr.data;
shdPtr.data = nullptr;
return *this;
}
ShdPtr& operator=(const ShdPtr& shdPtr) noexcept
{
if (this == &shdPtr)
return *this;
if (RemovePtrData(data))
delete data;
data = shdPtr.data;
AddPtrData(data);
return *this;
}
bool operator==(const ShdPtr& shdPtr)
{
if (!HasPtrData(data))
data = nullptr;
return data == shdPtr.data;
}
bool operator==(T* inPtr)
{
if (!HasPtrData(data))
data = nullptr;
return data == inPtr;
}
bool operator!=(const ShdPtr& shdPtr)
{
if (!HasPtrData(data))
data = nullptr;
return data != shdPtr.data;
}
bool operator!=(T* inPtr)
{
if (!HasPtrData(data))
data = nullptr;
return data != inPtr;
}
void Release()
{
if (RemovePtrData(data))
delete data;
data = nullptr;
}
T* GetData()
{
if (!HasPtrData(data))
data = nullptr;
return data;
}
};
}