#pragma once #include <dirent.h> #include <luna/SharedPtr.h> #include <luna/String.h> #include <luna/Vector.h> #include <os/Path.h> namespace os { class Directory { public: static Result<SharedPtr<Directory>> open(const Path& path); enum class Filter { None, Hidden, ParentAndBase }; Result<String> next(Filter filter); Result<Vector<String>> list_names(Filter filter); struct Entry { String name; mode_t mode; usize size; time_t mtime; }; Result<Vector<Entry>> list(Filter filter); void rewind(); int fd() { return dirfd(m_dirp); } ~Directory(); private: Directory(Badge<Directory>); DIR* m_dirp { nullptr }; }; }