continued insertion testing, not sure i like this method
This commit is contained in:
parent
08dd616bef
commit
4d5e3dc0ea
@ -382,11 +382,40 @@ void PieceTable::begin_insert(const Cursor & cursor, bool before)
|
|||||||
change->links[1][1][1] = piece->next;
|
change->links[1][1][1] = piece->next;
|
||||||
|
|
||||||
apply_change(change, 1u);
|
apply_change(change, 1u);
|
||||||
|
|
||||||
|
m_insert_before_piece = new_piece_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_inserting_piece = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PieceTable::insert_code_point(uint32_t code_point)
|
void PieceTable::insert_code_point(uint32_t code_point)
|
||||||
{
|
{
|
||||||
|
if (m_inserting_piece == nullptr)
|
||||||
|
{
|
||||||
|
m_inserting_piece = add_piece();
|
||||||
|
m_inserting_piece->start = &m_append_buffer[m_append_buffer_index];
|
||||||
|
m_inserting_piece->length = 0u;
|
||||||
|
m_inserting_piece->flags = 0u;
|
||||||
|
m_inserting_piece->prev = m_insert_before_piece;
|
||||||
|
m_inserting_piece->next = m_insert_before_piece->next;
|
||||||
|
|
||||||
|
Change * change = add_change();
|
||||||
|
change->links[0][0][0] = m_insert_before_piece;
|
||||||
|
change->links[0][0][1] = m_insert_before_piece->next;
|
||||||
|
change->links[0][1][0] = nullptr;
|
||||||
|
change->links[0][1][1] = nullptr;
|
||||||
|
change->links[1][0][0] = m_insert_before_piece;
|
||||||
|
change->links[1][0][1] = m_inserting_piece;
|
||||||
|
change->links[1][1][0] = m_inserting_piece;
|
||||||
|
change->links[1][1][1] = m_insert_before_piece->next;
|
||||||
|
|
||||||
|
apply_change(change, 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t bytes = Encoding::encode(code_point, encoding, &m_append_buffer[m_append_buffer_index]);
|
||||||
|
m_inserting_piece->length += bytes;
|
||||||
|
m_append_buffer_index += bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PieceTable::end_insert()
|
void PieceTable::end_insert()
|
||||||
|
@ -188,6 +188,7 @@ protected:
|
|||||||
PagedBuffer<Change> m_changes;
|
PagedBuffer<Change> m_changes;
|
||||||
uint32_t m_changes_index;
|
uint32_t m_changes_index;
|
||||||
Piece * m_insert_before_piece;
|
Piece * m_insert_before_piece;
|
||||||
|
Piece * m_inserting_piece;
|
||||||
|
|
||||||
std::list<std::shared_ptr<Cursor>> m_cursors;
|
std::list<std::shared_ptr<Cursor>> m_cursors;
|
||||||
};
|
};
|
||||||
|
@ -277,6 +277,13 @@ void Window::handle_key(uint32_t scancode, uint32_t mod)
|
|||||||
case SDL_SCANCODE_I:
|
case SDL_SCANCODE_I:
|
||||||
m_buffer->piece_table->begin_insert(*m_cursor, true);
|
m_buffer->piece_table->begin_insert(*m_cursor, true);
|
||||||
break;
|
break;
|
||||||
|
case SDL_SCANCODE_O:
|
||||||
|
m_buffer->piece_table->insert_code_point('*');
|
||||||
|
redraw();
|
||||||
|
break;
|
||||||
|
case SDL_SCANCODE_A:
|
||||||
|
m_buffer->piece_table->begin_insert(*m_cursor, false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user