void ssa_parser_c::decode_chars(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, memory_cptr &buffer, size_t bytes_to_add, size_t &allocated) { unsigned char bytes[3]; uint32_t value = ((c1 - 33) << 18) + ((c2 - 33) << 12) + ((c3 - 33) << 6) + (c4 - 33); bytes[2] = value & 0x0000ff; bytes[1] = (value & 0x00ff00) >> 8; bytes[0] = (value & 0xff0000) >> 16; if ((buffer->get_size() + bytes_to_add) > allocated) { int old_size = buffer->get_size(); allocated += 1024; buffer->resize(allocated); buffer->set_size(old_size); } memcpy(buffer->get_buffer() + buffer->get_size(), bytes, bytes_to_add); buffer->set_size(buffer->get_size() + bytes_to_add); }
uint32_t mm_io_c::read(memory_cptr &buffer, size_t size, int offset) { if (-1 == offset) offset = buffer->get_size(); if (buffer->get_size() <= (size + static_cast<size_t>(offset))) buffer->resize(size + offset); if (read(buffer->get_buffer() + offset, size) != size) throw mtx::mm_io::end_of_file_x(); buffer->set_size(size + offset); return size; }