/* ------------------------------------------- Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. ------------------------------------------- */ #pragma once #include #include namespace Kernel { class Pmm; class PTEWrapper; class Pmm final { public: explicit Pmm(); ~Pmm(); Pmm& operator=(const Pmm&) = delete; Pmm(const Pmm&) = default; Ref RequestPage(Boolean user = false, Boolean readWrite = false); Boolean FreePage(Ref refPage); Boolean ToggleRw(Ref refPage, Boolean enable = true); Boolean TogglePresent(Ref refPage, Boolean enable = true); Boolean ToggleUser(Ref refPage, Boolean enable = true); Boolean ToggleShare(Ref refPage, Boolean enable = true); /// @brief Get the page manager of this. Ref& Leak() { return fPageMgr; } private: Ref fPageMgr; }; } // namespace Kernel