#ifndef ARBUTILS_BORROWEDPTR_HPP
#define ARBUTILS_BORROWEDPTR_HPP

namespace Arbutils::Memory{
    template <class T>
    class BorrowedPtr{
        T* _ptr;

    public:
        inline explicit constexpr BorrowedPtr(T* ptr) noexcept : _ptr(ptr){};

        inline constexpr T* GetUnsafe() noexcept { return _ptr; }
        inline constexpr const T* GetUnsafe() const noexcept { return _ptr; }

        T* operator->() noexcept { return _ptr; }
        const T* operator->() const noexcept { return _ptr; }

    };
}

#endif // ARBUTILS_BORROWEDPTR_HPP