37 lines
847 B
C++
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
|