void buffer::insert( size_t where, const buffer& from, size_t begin, size_t end ) { trace_log << "buffer::insert where=" << where << " begin=" << begin << " end=" << end << endl; if (!from && begin == end) return; assert_throw(m_data); assert_throw(from.m_data); trace_log << "from.m_data->size=" << from.m_data->size << endl; assert_throw(type() == from.type()); assert_throw(begin <= end); assert_throw(end <= from.m_data->size); assert_throw(where <= m_data->size); if (begin == end) return; make_writable(); m_data->size += end - begin; switch (m_data->type) { case BT_UTF16: case BT_ANSI16: where *= 2; begin *= 2; end *= 2; break; } m_data->buf.insert(m_data->buf.begin() + where, from.m_data->buf.begin() + begin, from.m_data->buf.begin() + end); }