#pragma once
#include "memory/Paging.h"

struct AddressSpace
{
    static AddressSpace create();

    void destroy();

    void detach();

    AddressSpace clone();

    PageTable* get_pml4()
    {
        return m_pml4;
    }

    bool is_cloned()
    {
        return *m_refs > 1;
    }

  private:
    PageTable* m_pml4;

    int* m_refs;
};