Add frame() method.
This commit is contained in:
parent
55427a71d6
commit
d475003215
2 changed files with 20 additions and 4 deletions
|
@ -33,6 +33,9 @@ public:
|
|||
const data_type* begin() const { return m_begin; }
|
||||
const data_type* end() const { return m_begin + size(); }
|
||||
|
||||
data_type* frame(unsigned int idx);
|
||||
const data_type* frame(unsigned int idx) const;
|
||||
|
||||
static constexpr std::size_t size() { return 8192; }
|
||||
|
||||
const std::vector<uint8_t>& palette() const { return m_icon_palette; }
|
||||
|
|
|
@ -85,27 +85,40 @@ BasicBlock<Const>::BasicBlock (data_type* beg) :
|
|||
template <bool Const>
|
||||
BasicBlock<Const>::~BasicBlock() = default;
|
||||
|
||||
template <bool Const>
|
||||
auto BasicBlock<Const>::frame(unsigned int idx) -> data_type* {
|
||||
return const_cast<data_type*>(const_cast<const BasicBlock<Const>*>(this)->frame(idx));
|
||||
}
|
||||
|
||||
template <bool Const>
|
||||
auto BasicBlock<Const>::frame(unsigned int idx) const -> const data_type* {
|
||||
const constexpr unsigned int framesize = 128;
|
||||
assert(idx * framesize + framesize <= this->size());
|
||||
return this->begin() + framesize * idx;
|
||||
}
|
||||
|
||||
template <bool Const>
|
||||
bool BasicBlock<Const>::has_magic() const {
|
||||
const constexpr uint16_t magic = ('S' << 8) | 'C'; //0x5343 "SC"
|
||||
return magic == static_cast<uint16_t>((m_begin[0] << 8) | m_begin[1]);
|
||||
const data_type* const ptr = frame(0);
|
||||
return magic == static_cast<uint16_t>((ptr[0] << 8) | ptr[1]);
|
||||
}
|
||||
|
||||
template <bool Const>
|
||||
IconDisplayFlag BasicBlock<Const>::icon_display_flag() const {
|
||||
const uint8_t val = m_begin[2];
|
||||
const uint8_t val = frame(0)[2];
|
||||
return static_cast<IconDisplayFlag>(val);
|
||||
}
|
||||
|
||||
template <bool Const>
|
||||
int BasicBlock<Const>::block_count() const {
|
||||
return m_begin[3];
|
||||
return frame(0)[3];
|
||||
}
|
||||
|
||||
template <bool Const>
|
||||
std::string BasicBlock<Const>::title() const {
|
||||
char mem[64 + 1];
|
||||
std::strncpy(mem, reinterpret_cast<const char*>(m_begin + 4), sizeof(mem) / sizeof(mem[0]));
|
||||
std::strncpy(mem, reinterpret_cast<const char*>(frame(0) + 4), sizeof(mem) / sizeof(mem[0]));
|
||||
std::string_view temp(mem, std::strlen(mem));
|
||||
auto name = full_to_halfwidth_ascii(shiftjis_to_utf8(temp));
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue