diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index 959dbf2..10f1a29 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -9,6 +9,8 @@ PieceTable::PieceTable(const uint8_t * file_buffer, unsigned long file_buffer_si start_descriptor->next = end_descriptor; end_descriptor->prev = start_descriptor; m_piece_descriptor_index = 2u; + m_cursor_position.pd = end_descriptor; + m_cursor_position.offset = 0u; } void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, uint32_t n_chars, bool eol) @@ -24,4 +26,6 @@ void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, uin end_descriptor->prev->next = pd; end_descriptor->prev = pd; m_num_lines++; + if (m_cursor_position.pd == end_descriptor) + m_cursor_position.pd = pd; } diff --git a/src/core/PieceTable.h b/src/core/PieceTable.h index b990b09..c3f2b35 100644 --- a/src/core/PieceTable.h +++ b/src/core/PieceTable.h @@ -43,6 +43,15 @@ public: void toggle_eol() { n_chars ^= PIECE_DESCRIPTOR_N_CHARS_EOL_FLAG_MASK; } }; + struct Position + { + /** The piece. */ + PieceDescriptor * pd; + + /** Byte offset within the piece. */ + uint32_t offset; + }; + struct ChangeDescriptor { uint32_t piece_descriptor_index; @@ -68,6 +77,8 @@ public: PieceDescriptor * start_descriptor; PieceDescriptor * end_descriptor; + Position m_cursor_position; + void append_initial_line_piece(uint8_t * start, uint32_t length, uint32_t n_chars, bool eol); protected: