Beispiel #1
0
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);
}