From c5987d882d974998cc92b28db30f12752b63c30f Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Fri, 20 Mar 2020 14:58:36 +0100 Subject: [PATCH] Block should be lightweight so don't store palette. --- subprojects/memcard/include/memcard/block.hpp | 3 +-- subprojects/memcard/src/block.cpp | 7 ++++++- subprojects/memcard/src/icon_fetch.cpp | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/subprojects/memcard/include/memcard/block.hpp b/subprojects/memcard/include/memcard/block.hpp index 61e4256..5bab4ad 100644 --- a/subprojects/memcard/include/memcard/block.hpp +++ b/subprojects/memcard/include/memcard/block.hpp @@ -41,7 +41,7 @@ public: static constexpr std::size_t size() { return FrameSize * 64; } - const std::vector& palette() const { return m_icon_palette; } + std::vector palette() const; bool has_magic() const; IconDisplayFlag icon_display_flag() const; int block_count() const; @@ -49,7 +49,6 @@ public: std::string title() const; private: - std::vector m_icon_palette; std::size_t m_index; data_type* m_begin; }; diff --git a/subprojects/memcard/src/block.cpp b/subprojects/memcard/src/block.cpp index c908c68..07cbd22 100644 --- a/subprojects/memcard/src/block.cpp +++ b/subprojects/memcard/src/block.cpp @@ -67,7 +67,6 @@ namespace { template BasicBlock::BasicBlock (data_type* beg, std::size_t index) : - m_icon_palette(extract_palette(beg, beg + size())), m_index(index), m_begin(beg) { @@ -97,6 +96,12 @@ auto BasicBlock::frame(unsigned int idx) const -> const data_type* { return this->begin() + FrameSize * idx; } +template +std::vector BasicBlock::palette() const { + const auto ptr = frame(0); + return extract_palette(ptr, ptr + FrameSize); +} + template bool BasicBlock::has_magic() const { const constexpr uint16_t magic = ('S' << 8) | 'C'; //0x5343 "SC" diff --git a/subprojects/memcard/src/icon_fetch.cpp b/subprojects/memcard/src/icon_fetch.cpp index 8cdcb16..7184e8f 100644 --- a/subprojects/memcard/src/icon_fetch.cpp +++ b/subprojects/memcard/src/icon_fetch.cpp @@ -119,7 +119,7 @@ namespace { std::vector> icon_fetch (const psx::ConstBlock& block, int width, int height) { const constexpr int in_height = 16, in_width = 16; const bool scale = (in_width != width or in_height != height); - const std::vector& palette = block.palette(); + const std::vector palette = block.palette(); assert(palette.size() == 16 * 4); const int32_t palette_padded_size = (not scale) * (((palette.size() * CHAR_BIT + 31) bitand ~31) / CHAR_BIT); assert(palette.size() == static_cast(palette_padded_size) or scale);