// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Compiler.h"
///
/// Helper class used to delete another object.
///
template
class DeleteMe
{
private:
T* _toDelete;
DeleteMe()
{
}
DeleteMe(const DeleteMe&)
{
};
DeleteMe& operator=(const DeleteMe&)
{
return *this;
};
public:
///
/// Init
///
/// Object to delete
explicit DeleteMe(T* toDelete)
: _toDelete(toDelete)
{
}
///
/// Destructor
///
~DeleteMe()
{
if (_toDelete)
::Delete(_toDelete);
}
public:
///
/// Delete linked object and assign new one
///
/// New object
void DeleteAndSetNew(T* other)
{
ASSERT(other);
if (_toDelete)
{
::Delete(_toDelete);
}
_toDelete = other;
}
///
/// Delete linked object
///
void Delete()
{
if (_toDelete)
{
::Delete(_toDelete);
_toDelete = nullptr;
}
}
FORCE_INLINE bool IsSet() const
{
return _toDelete != nullptr;
}
FORCE_INLINE bool IsMissing() const
{
return _toDelete == nullptr;
}
FORCE_INLINE T* Get() const
{
return _toDelete;
}
public:
///
/// Object
///
///
T* operator->()
{
return _toDelete;
}
///
/// Object
///
/// Object
const T* operator->() const
{
return _toDelete;
}
///
/// Object
///
/// Object
T* operator*()
{
return _toDelete;
}
///
/// Object
///
/// Object
const T& operator*() const
{
return *_toDelete;
}
};