29#include <EASTL/fixed_string.h>
30#include <EASTL/functional.h>
31#include <EASTL/string_view.h>
59 eastl::fixed_string<char, 15, false>
name;
98 void initialize(eastl::function<
void(
bool success)> callback);
103 template <
typename U>
105 m_parser.
initialize([handle,
this](
bool success) {
129 void getDirentry(eastl::string_view path,
DirEntry* entry, eastl::function<
void(
bool success)> callback);
133 : m_parser(parser), m_path(path), m_entry(entry) {}
135 template <
typename U>
137 m_parser.
getDirentry(m_path, m_entry, [handle,
this](
bool success) {
146 eastl::string_view m_path;
172 eastl::function<
bool(eastl::string_view name,
const DirEntry& entry)> visitor,
173 eastl::function<
void(
bool success)> callback);
175 const DirEntry& dir, eastl::function<
bool(eastl::string_view name,
const DirEntry& entry)> visitor);
178 eastl::function<
bool(eastl::string_view name,
const DirEntry& entry)> visitor)
179 : m_parser(parser), m_dir(dir), m_visitor(eastl::move(visitor)) {}
181 template <
typename U>
183 m_parser.
walkDirectory(m_dir, eastl::move(m_visitor), [handle,
this](
bool success) {
193 eastl::function<bool(eastl::string_view name,
const DirEntry& entry)> m_visitor;
197 eastl::function<
bool(eastl::string_view name,
const DirEntry& entry)> visitor) {
233 void parseDirEntry(
const uint8_t* data,
DirEntry* entry);
234 eastl::string_view getEntryName(
const uint8_t* data);
237 void walkDone(
bool success);
239 uint8_t m_buffer[2048];
240 eastl::function<void(
bool success)> m_callback =
nullptr;
241 eastl::string_view m_path;
243 CDRom* m_cdrom =
nullptr;
244 uint32_t m_cachedLBA = 0;
247 eastl::fixed_string<char, 128> m_cachedPath;
248 bool m_initialized =
false;
249 eastl::function<bool(eastl::string_view name,
const DirEntry& entry)> m_walkVisitor =
nullptr;
250 uint32_t m_walkLBA = 0;
251 uint32_t m_walkEnd = 0;
The base CDRom class.
Definition cdrom.hh:46
An ISO9660 parser.
Definition iso9660-parser.hh:48
TaskQueue::Task scheduleInitialize()
Definition iso9660-parser.cpp:68
bool initialized()
Returns the state of the parser.
Definition iso9660-parser.hh:223
TaskQueue::Task scheduleGetDirentry(eastl::string_view path, DirEntry *entry)
Definition iso9660-parser.cpp:125
TaskQueue::Task scheduleReadRequest(const ReadRequest *request)
Read a file asynchronously.
Definition iso9660-parser.cpp:132
TaskQueue::Task scheduleWalkDirectory(const DirEntry &dir, eastl::function< bool(eastl::string_view name, const DirEntry &entry)> visitor)
Definition iso9660-parser.cpp:160
WalkDirectoryAwaiter walkDirectory(const DirEntry &dir, eastl::function< bool(eastl::string_view name, const DirEntry &entry)> visitor)
Definition iso9660-parser.hh:196
GetDirentryAwaiter getDirentry(eastl::string_view path, DirEntry *entry)
Definition iso9660-parser.hh:150
ISO9660Parser(CDRom *cdrom)
The ISO9660Parser constructor.
Definition iso9660-parser.hh:87
void initialize(eastl::function< void(bool success)> callback)
Initializes the parser.
Definition iso9660-parser.cpp:32
CDRom * getCDRom()
Returns the CDRom object used by the parser.
Definition iso9660-parser.hh:230
void walkDirectory(const DirEntry &dir, eastl::function< bool(eastl::string_view name, const DirEntry &entry)> visitor, eastl::function< void(bool success)> callback)
Walk the entries of a directory.
Definition iso9660-parser.cpp:140
InitializeAwaiter initialize()
Definition iso9660-parser.hh:116
void getDirentry(eastl::string_view path, DirEntry *entry, eastl::function< void(bool success)> callback)
Get the Direntry object for a given path.
Definition iso9660-parser.cpp:72
The Task class.
Definition task.hh:140
An ISO9660 directory entry.
Definition iso9660-parser.hh:56
uint32_t size
Definition iso9660-parser.hh:58
uint32_t LBA
Definition iso9660-parser.hh:57
enum psyqo::ISO9660Parser::DirEntry::@34 type
eastl::fixed_string< char, 15, false > name
Definition iso9660-parser.hh:59
@ PARENT_DIR
Definition iso9660-parser.hh:60
@ INVALID
Definition iso9660-parser.hh:60
@ CURRENT_DIR
Definition iso9660-parser.hh:60
@ FILE
Definition iso9660-parser.hh:60
@ DIRECTORY
Definition iso9660-parser.hh:60
Definition iso9660-parser.hh:131
void await_suspend(std::coroutine_handle< U > handle)
Definition iso9660-parser.hh:136
bool await_ready() const
Definition iso9660-parser.hh:134
GetDirentryAwaiter(ISO9660Parser &parser, eastl::string_view path, DirEntry *entry)
Definition iso9660-parser.hh:132
bool await_resume()
Definition iso9660-parser.hh:142
Definition iso9660-parser.hh:100
void await_suspend(std::coroutine_handle< U > handle)
Definition iso9660-parser.hh:104
bool await_ready() const
Definition iso9660-parser.hh:102
bool await_resume()
Definition iso9660-parser.hh:110
InitializeAwaiter(ISO9660Parser &parser)
Definition iso9660-parser.hh:101
An asynchronous read request.
Definition iso9660-parser.hh:74
void * buffer
Definition iso9660-parser.hh:76
struct DirEntry entry
Definition iso9660-parser.hh:75
Definition iso9660-parser.hh:176
bool await_ready() const
Definition iso9660-parser.hh:180
WalkDirectoryAwaiter(ISO9660Parser &parser, const DirEntry &dir, eastl::function< bool(eastl::string_view name, const DirEntry &entry)> visitor)
Definition iso9660-parser.hh:177
void await_suspend(std::coroutine_handle< U > handle)
Definition iso9660-parser.hh:182
bool await_resume()
Definition iso9660-parser.hh:188