diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index 568bac9..ea67af5 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -58,8 +58,7 @@ bool Buffer::load_from_file(const char * filename) auto next = it; next++; bool eol = next != text_loader.end(); - /* TODO: correctly calculate n_chars based on current file encoding. */ - piece_table->append_initial_line_piece(it->start, it->length, it->length, eol); + piece_table->append_initial_line_piece(it->start, it->length, eol); } m_eol_at_eof = text_loader.get_eol_at_eof(); diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index 8466742..fd49fd3 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -11,16 +11,16 @@ PieceTable::PieceTable(const uint8_t * file_buffer, unsigned long file_buffer_si m_piece_index = 2u; } -void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, uint32_t n_chars, bool eol) +void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, bool eol) { Piece * piece = add_piece(); piece->prev = end_piece->prev; piece->next = end_piece; piece->start = start; piece->length = length; - piece->n_chars = n_chars; + piece->flags = 0u; if (eol) - piece->n_chars |= Piece::N_CHARS_EOL_FLAG; + piece->flags |= Piece::EOL_FLAG; end_piece->prev->next = piece; end_piece->prev = piece; m_num_lines++; diff --git a/src/core/PieceTable.h b/src/core/PieceTable.h index 74da11f..fc1e2f6 100644 --- a/src/core/PieceTable.h +++ b/src/core/PieceTable.h @@ -20,7 +20,7 @@ public: { enum { - N_CHARS_EOL_FLAG = 0x80000000u, + EOL_FLAG = 0x80000000u, }; /** The previous piece in the chain. */ @@ -36,19 +36,15 @@ public: uint32_t length; /** - * Number of characters in the text. - * Also, the highest bit is the eol flag. + * Flags. */ - uint32_t n_chars; - - /** Get the number of characters pointed to by this piece. */ - uint32_t get_n_chars() { return n_chars & (~N_CHARS_EOL_FLAG); } + uint32_t flags; /** Get whether this piece is the end of a line. */ - bool eol() { return (n_chars & N_CHARS_EOL_FLAG) != 0u; } + bool eol() { return (flags & EOL_FLAG) != 0u; } /** Toggle whether this piece is the end of a line. */ - void toggle_eol() { n_chars ^= N_CHARS_EOL_FLAG; } + void toggle_eol() { flags ^= EOL_FLAG; } }; struct Cursor @@ -80,7 +76,7 @@ public: Piece * start_piece; Piece * end_piece; - void append_initial_line_piece(uint8_t * start, uint32_t length, uint32_t n_chars, bool eol); + void append_initial_line_piece(uint8_t * start, uint32_t length, bool eol); Piece * get_start_of_line(Piece * start) const;