From b2c271956a02994b4b63804c274dccfba1cc71d1 Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Mon, 11 May 2026 22:16:56 +0200 Subject: [PATCH] chore: reorder methods of ipak entry read stream --- .../ObjContainer/IPak/IPakEntryReadStream.cpp | 8 +-- .../ObjContainer/IPak/IPakEntryReadStream.h | 69 ++++++++++--------- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.cpp b/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.cpp index 3174a504..918528ea 100644 --- a/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.cpp +++ b/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.cpp @@ -7,6 +7,7 @@ #include #include #include +#include using namespace ipak_consts; @@ -134,7 +135,7 @@ bool IPakEntryReadStream::ValidateBlockHeader(const IPakDataBlockHeader* blockHe } // We expect the current file to be continued where we left off - if (static_cast(blockHeader->countAndOffset.offset) != m_file_head) + if (std::cmp_not_equal(blockHeader->countAndOffset.offset, m_file_head)) { // A matching offset is only relevant if a command contains data for (unsigned currentCommand = 0; currentCommand < blockHeader->countAndOffset.count; currentCommand++) @@ -191,8 +192,7 @@ bool IPakEntryReadStream::NextBlock() auto estimatedChunksToRead = AlignForward(m_entry_size - static_cast(m_pos - m_base_pos), IPAK_CHUNK_SIZE) / IPAK_CHUNK_SIZE; - if (estimatedChunksToRead > IPAK_CHUNK_COUNT_PER_READ) - estimatedChunksToRead = IPAK_CHUNK_COUNT_PER_READ; + estimatedChunksToRead = std::min(estimatedChunksToRead, IPAK_CHUNK_COUNT_PER_READ); if (!SetChunkBufferWindow(chunkStartPos, estimatedChunksToRead)) return false; @@ -324,7 +324,7 @@ std::streambuf::int_type IPakEntryReadStream::uflow() return EOF; } -std::streamsize IPakEntryReadStream::xsgetn(char* ptr, const std::streamsize count) +std::streamsize IPakEntryReadStream::xsgetn(char* ptr, std::streamsize count) { auto* destBuffer = reinterpret_cast(ptr); std::streamsize countRead = 0; diff --git a/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.h b/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.h index da90d261..e7861b9b 100644 --- a/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.h +++ b/src/ObjLoading/ObjContainer/IPak/IPakEntryReadStream.h @@ -8,31 +8,22 @@ class IPakEntryReadStream final : public objbuf { - static constexpr size_t IPAK_DECOMPRESS_BUFFER_SIZE = 0x8000; +public: + IPakEntryReadStream(std::istream& stream, IPakStreamManagerActions* streamManagerActions, uint8_t* chunkBuffer, int64_t startOffset, size_t entrySize); + ~IPakEntryReadStream() override; - uint8_t* m_chunk_buffer; + [[nodiscard]] bool is_open() const override; + bool close() override; - std::istream& m_stream; - IPakStreamManagerActions* m_stream_manager_actions; - - int64_t m_file_offset; - int64_t m_file_head; - - size_t m_entry_size; - - uint8_t m_decompress_buffer[IPAK_DECOMPRESS_BUFFER_SIZE]; - IPakDataBlockHeader* m_current_block; - unsigned m_next_command; - uint8_t* m_current_command_buffer; - size_t m_current_command_length; - size_t m_current_command_offset; - - int64_t m_pos; - int64_t m_base_pos; - int64_t m_end_pos; - int64_t m_buffer_start_pos; - int64_t m_buffer_end_pos; +protected: + std::streamsize showmanyc() override; + int_type underflow() override; + int_type uflow() override; + std::streamsize xsgetn(char* ptr, std::streamsize count) override; + pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode mode) override; + pos_type seekpos(pos_type pos, std::ios_base::openmode mode) override; +private: template static T AlignForward(const T num, const T alignTo) { return (num + alignTo - 1) / alignTo * alignTo; @@ -95,18 +86,28 @@ class IPakEntryReadStream final : public objbuf */ bool AdvanceStream(); -public: - IPakEntryReadStream(std::istream& stream, IPakStreamManagerActions* streamManagerActions, uint8_t* chunkBuffer, int64_t startOffset, size_t entrySize); - ~IPakEntryReadStream() override; + static constexpr size_t IPAK_DECOMPRESS_BUFFER_SIZE = 0x8000; - [[nodiscard]] bool is_open() const override; - bool close() override; + uint8_t* m_chunk_buffer; -protected: - std::streamsize showmanyc() override; - int_type underflow() override; - int_type uflow() override; - std::streamsize xsgetn(char* ptr, std::streamsize count) override; - pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode mode) override; - pos_type seekpos(pos_type pos, std::ios_base::openmode mode) override; + std::istream& m_stream; + IPakStreamManagerActions* m_stream_manager_actions; + + int64_t m_file_offset; + int64_t m_file_head; + + size_t m_entry_size; + + uint8_t m_decompress_buffer[IPAK_DECOMPRESS_BUFFER_SIZE]; + IPakDataBlockHeader* m_current_block; + unsigned m_next_command; + uint8_t* m_current_command_buffer; + size_t m_current_command_length; + size_t m_current_command_offset; + + int64_t m_pos; + int64_t m_base_pos; + int64_t m_end_pos; + int64_t m_buffer_start_pos; + int64_t m_buffer_end_pos; };