diff --git a/subprojects/memcard/include/memcard/block.hpp b/subprojects/memcard/include/memcard/block.hpp index 114ed30..55bfee2 100644 --- a/subprojects/memcard/include/memcard/block.hpp +++ b/subprojects/memcard/include/memcard/block.hpp @@ -1,13 +1,12 @@ #pragma once #include "memcard/frame.hpp" +#include "memcard/frame_iterator.hpp" #include #include #include #include -//see: https://www.psdevwiki.com/ps3/PS1_Savedata#Memory_Card_Formats_PS1 - namespace mc::psx { enum class IconDisplayFlag { NoIcon = 0x00, @@ -23,6 +22,8 @@ template class BasicBlock { using data_type = typename std::conditional::type; public: + typedef FrameIterator iterator; + typedef FrameIterator const_iterator; static const constexpr std::size_t FrameCount = 64; static const constexpr std::size_t TOCBlockIndex = 0; @@ -30,6 +31,13 @@ public: BasicBlock (data_type* beg, std::size_t index); ~BasicBlock(); + iterator begin(); + iterator end(); + const_iterator cbegin() const; + const_iterator begin() const; + const_iterator cend() const; + const_iterator end() const; + data_type* data() { return m_begin; } const data_type* data() const { return m_begin; } diff --git a/subprojects/memcard/include/memcard/content_info.hpp b/subprojects/memcard/include/memcard/content_info.hpp index 121ea57..2b074f3 100644 --- a/subprojects/memcard/include/memcard/content_info.hpp +++ b/subprojects/memcard/include/memcard/content_info.hpp @@ -15,7 +15,7 @@ enum class BlockContent : uint8_t { }; struct ContentInfo { - ContentInfo (const ConstFrame& block); + ContentInfo (const ConstFrame& frame); uint32_t use_byte; uint16_t magic; diff --git a/subprojects/memcard/include/memcard/frame_iterator.hpp b/subprojects/memcard/include/memcard/frame_iterator.hpp new file mode 100644 index 0000000..866a893 --- /dev/null +++ b/subprojects/memcard/include/memcard/frame_iterator.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "memcard/part_iterator.hpp" +#include "memcard/frame.hpp" + +namespace mc::psx { +template +class BasicBlock; + +template +using FrameIterator = PartIterator, BasicFrame>; +} //namespace mc::psx diff --git a/subprojects/memcard/include/memcard/memorycard.hpp b/subprojects/memcard/include/memcard/memorycard.hpp index a90c318..12cdc82 100644 --- a/subprojects/memcard/include/memcard/memorycard.hpp +++ b/subprojects/memcard/include/memcard/memorycard.hpp @@ -9,6 +9,8 @@ #include #include +//see: https://www.psdevwiki.com/ps3/PS1_Savedata#Memory_Card_Formats_PS1 + namespace mc::psx { class MemoryCard { public: diff --git a/subprojects/memcard/src/block.cpp b/subprojects/memcard/src/block.cpp index 485ac9e..ace78a0 100644 --- a/subprojects/memcard/src/block.cpp +++ b/subprojects/memcard/src/block.cpp @@ -87,6 +87,36 @@ BasicBlock::BasicBlock (data_type* beg, std::size_t index) : template BasicBlock::~BasicBlock() = default; +template +auto BasicBlock::begin() -> iterator { + return iterator{this, 0}; +} + +template +auto BasicBlock::end() -> iterator { + return iterator{this, size()}; +} + +template +auto BasicBlock::cbegin() const -> const_iterator { + return const_iterator{this, size()}; +} + +template +auto BasicBlock::begin() const -> const_iterator { + return const_iterator{this, size()}; +} + +template +auto BasicBlock::cend() const -> const_iterator { + return const_iterator{this, size()}; +} + +template +auto BasicBlock::end() const -> const_iterator { + return const_iterator{this, size()}; +} + template BasicFrame BasicBlock::frame(unsigned int idx) { assert(idx < size());