bool mm_io_c::write_bom(const std::string &charset) { static const unsigned char utf8_bom[3] = {0xef, 0xbb, 0xbf}; static const unsigned char utf16le_bom[2] = {0xff, 0xfe}; static const unsigned char utf16be_bom[2] = {0xfe, 0xff}; static const unsigned char utf32le_bom[4] = {0xff, 0xfe, 0x00, 0x00}; static const unsigned char utf32be_bom[4] = {0x00, 0x00, 0xff, 0xfe}; const unsigned char *bom; unsigned int bom_len; if (charset.empty()) return false; if ((charset =="UTF-8") || (charset =="UTF8")) { bom_len = 3; bom = utf8_bom; } else if ((charset =="UTF-16") || (charset =="UTF-16LE") || (charset =="UTF16") || (charset =="UTF16LE")) { bom_len = 2; bom = utf16le_bom; } else if ((charset =="UTF-16BE") || (charset =="UTF16BE")) { bom_len = 2; bom = utf16be_bom; } else if ((charset =="UTF-32") || (charset =="UTF-32LE") || (charset =="UTF32") || (charset =="UTF32LE")) { bom_len = 4; bom = utf32le_bom; } else if ((charset =="UTF-32BE") || (charset =="UTF32BE")) { bom_len = 4; bom = utf32be_bom; } else return false; setFilePointer(0, seek_beginning); return (write(bom, bom_len) == bom_len); }
void mm_io_c::save_pos(int64_t new_pos) { m_positions.push(getFilePointer()); if (-1 != new_pos) setFilePointer(new_pos); }
void mm_io_c::skip(int64 num_bytes) { uint64_t pos = getFilePointer(); setFilePointer(pos + num_bytes); if ((pos + num_bytes) != getFilePointer()) throw mtx::mm_io::end_of_file_x(); }
bool mm_io_c::setFilePointer2(int64 offset, seek_mode mode) { try { setFilePointer(offset, mode); return true; } catch(...) { return false; } }
bool mm_io_c::restore_pos() { if (m_positions.empty()) return false; setFilePointer(m_positions.top()); m_positions.pop(); return true; }
int64_t mm_io_c::get_size() { if (-1 == m_cached_size) { save_pos(); setFilePointer(0, seek_end); m_cached_size = getFilePointer(); restore_pos(); } return m_cached_size; }
mm_read_buffer_io_c::mm_read_buffer_io_c(mm_io_c *in, size_t buffer_size, bool delete_in) : mm_proxy_io_c(in, delete_in) , m_af_buffer(memory_c::alloc(buffer_size)) , m_buffer(m_af_buffer->get_buffer()) , m_cursor(0) , m_eof(false) , m_fill(0) , m_offset(0) , m_size(buffer_size) , m_buffering(true) , m_debug_seek(debugging_requested("read_buffer_io") || debugging_requested("read_buffer_io_read")) , m_debug_read(debugging_requested("read_buffer_io") || debugging_requested("read_buffer_io_read")) { setFilePointer(0, seek_beginning); }
bitLoader(FILE *_fp){ point = 0; setFilePointer(_fp); }