remove number of characters from a Piece
This commit is contained in:
parent
b0553fdbd2
commit
e913c15212
@ -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();
|
||||
|
@ -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++;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user