memoserv/subprojects/memcard/src/memorycard.cpp

37 lines
847 B
C++

#include "memcard/memorycard.hpp"
#include "memcard/block.hpp"
#include <algorithm>
#include <iterator>
#include <cassert>
namespace mc {
MemoryCard::MemoryCard() :
m_data(8192 * 16)
{
}
MemoryCard::MemoryCard (std::istream&& raw_mc) :
MemoryCard()
{
raw_mc >> std::noskipws;
std::copy_if(
std::istream_iterator<uint8_t>(raw_mc),
std::istream_iterator<uint8_t>(),
m_data.begin(),
[count = m_data.size()](auto&&) mutable { return count && count--; }
);
assert(8192 * 16 == m_data.size());
}
MemoryCard::~MemoryCard() = default;
Block MemoryCard::operator[] (std::size_t index) {
assert(index < 15);
return Block(m_data.data() + (index + 1) * Block::size());
}
ConstBlock MemoryCard::operator[] (std::size_t index) const {
assert(index < 15);
return ConstBlock(m_data.data() + (index + 1) * Block::size());
}
} //namespace mc