#pragma once #include #include #include #include #include namespace Kernel { class VirtualFileSystem : public FileSystem { public: static BAN::ErrorOr initialize(); static VirtualFileSystem& get(); virtual ~VirtualFileSystem() {}; virtual BAN::RefPtr root_inode() override { return m_root_inode; } BAN::ErrorOr mount_test(); BAN::ErrorOr mount(FileSystem*, BAN::StringView); struct File { BAN::RefPtr inode; BAN::String canonical_path; }; BAN::ErrorOr file_from_absolute_path(BAN::StringView); struct MountPoint { BAN::RefPtr inode; FileSystem* target; }; const BAN::Vector& mount_points() const { return m_mount_points; } private: VirtualFileSystem() = default; BAN::ErrorOr initialize_impl(); private: BAN::RefPtr m_root_inode; BAN::Vector m_mount_points; BAN::Vector m_storage_controllers; }; }