#ifndef VULKAN_DEVICE_MEMORY_HPP_
#define VULKAN_DEVICE_MEMORY_HPP_

#include <Utilities/Extern.hpp>
#include <Vk/Device/Device.hpp>

namespace Vk
{
    /**
     * @brief Represents a Vulkan device memory.
     */
    class DeviceMemory
    {
    private:
        std::shared_ptr<Vk::Device> m_device;
        VkDeviceMemory m_deviceMemory;
    
    public:
        /**
         * @brief Construct a device memory.
         * 
         * @param device The device.
         * @param memoryTypeIndex The memory type index.
         * @param size The size to allocate.
         */
        DeviceMemory(std::shared_ptr<Vk::Device> device, uint32_t memoryTypeIndex, VkDeviceSize size);
        DeviceMemory(const DeviceMemory &) = delete;
        ~DeviceMemory();

        /**
         * @brief Return the wrapped device memory.
         */
        VkDeviceMemory inner();
    };
}

#endif