#include "MetaCoreFoundation/MetaCoreArchive.h" #include namespace MetaCore { void MetaCoreArchiveWriter::WriteBytes(const void* data, std::size_t size) { if (data == nullptr || size == 0) { return; } const auto* bytes = static_cast(data); Buffer_.insert(Buffer_.end(), bytes, bytes + size); } void MetaCoreArchiveWriter::WriteSpan(std::span data) { Buffer_.insert(Buffer_.end(), data.begin(), data.end()); } const std::vector& MetaCoreArchiveWriter::GetBuffer() const { return Buffer_; } std::size_t MetaCoreArchiveWriter::GetSize() const { return Buffer_.size(); } MetaCoreArchiveReader::MetaCoreArchiveReader(std::span buffer) : Buffer_(buffer) { } bool MetaCoreArchiveReader::ReadBytes(void* destination, std::size_t size) { if (size == 0) { return true; } if (destination == nullptr || Offset_ + size > Buffer_.size()) { return false; } std::memcpy(destination, Buffer_.data() + Offset_, size); Offset_ += size; return true; } std::optional> MetaCoreArchiveReader::ReadSpan(std::size_t size) { if (Offset_ + size > Buffer_.size()) { return std::nullopt; } const std::span result = Buffer_.subspan(Offset_, size); Offset_ += size; return result; } std::optional> MetaCoreArchiveReader::PeekSpan(std::size_t size) const { if (Offset_ + size > Buffer_.size()) { return std::nullopt; } return Buffer_.subspan(Offset_, size); } bool MetaCoreArchiveReader::Skip(std::size_t size) { if (Offset_ + size > Buffer_.size()) { return false; } Offset_ += size; return true; } bool MetaCoreArchiveReader::IsEof() const { return Offset_ >= Buffer_.size(); } std::size_t MetaCoreArchiveReader::GetOffset() const { return Offset_; } std::size_t MetaCoreArchiveReader::GetRemainingSize() const { return Buffer_.size() - Offset_; } std::span MetaCoreArchiveReader::GetBuffer() const { return Buffer_; } } // namespace MetaCore