Пример #1
0
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);
}
Пример #2
0
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;
}