DiscIO/DirectoryBlob: Add ContentSource that stores data locally in std::vector.

This commit is contained in:
Admiral H. Curtiss 2022-06-09 00:17:20 +02:00
parent 9e5bc98496
commit f5c132580c
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
2 changed files with 14 additions and 1 deletions

View File

@ -134,6 +134,12 @@ bool DiscContent::Read(u64* offset, u64* length, u8** buffer) const
const ContentFixedByte& source = std::get<ContentFixedByte>(m_content_source); const ContentFixedByte& source = std::get<ContentFixedByte>(m_content_source);
std::fill_n(*buffer, bytes_to_read, source.m_byte); std::fill_n(*buffer, bytes_to_read, source.m_byte);
} }
else if (std::holds_alternative<ContentByteVector>(m_content_source))
{
const ContentByteVector& source = std::get<ContentByteVector>(m_content_source);
std::copy(source.m_bytes.begin() + offset_in_content,
source.m_bytes.begin() + offset_in_content + bytes_to_read, *buffer);
}
else else
{ {
PanicAlertFmt("DirectoryBlob: Invalid content source in DiscContent."); PanicAlertFmt("DirectoryBlob: Invalid content source in DiscContent.");

View File

@ -80,11 +80,18 @@ struct ContentFixedByte
u8 m_byte; u8 m_byte;
}; };
// Content chunk representing an arbitrary byte sequence that's stored within the struct itself.
struct ContentByteVector
{
std::vector<u8> m_bytes;
};
using ContentSource = std::variant<ContentFile, // File using ContentSource = std::variant<ContentFile, // File
const u8*, // Memory const u8*, // Memory
ContentPartition, // Partition ContentPartition, // Partition
ContentVolume, // Volume ContentVolume, // Volume
ContentFixedByte // Fixed value padding ContentFixedByte, // Fixed value padding
ContentByteVector // Byte sequence
>; >;
struct BuilderContentSource struct BuilderContentSource