dreamcast/text_editor/gap_buffer.hpp

37 lines
807 B
C++

#pragma once
#include <stdint.h>
typedef uint8_t char_type;
struct line_metadata {
int32_t * offsets;
int32_t size;
int32_t length;
int32_t gap;
};
struct gap_buffer {
char_type * buf;
int32_t size;
int32_t gap_start;
int32_t gap_end;
struct line_metadata line;
};
void line_init_from_buf(struct gap_buffer& gb,
int32_t * offsets,
int32_t size);
void gap_init_from_buf(struct gap_buffer& gb,
char_type * buf,
int32_t size,
int32_t length);
void gap_resize(struct gap_buffer& gb);
void gap_append(struct gap_buffer& gb, char_type c);
void gap_pop(struct gap_buffer& gb);
void gap_cursor_pos(struct gap_buffer& gb, int32_t delta);
int32_t gap_column_number(const struct gap_buffer& gb);
void gap_cursor_pos_line(struct gap_buffer& gb, int32_t delta);