2018-03-24 10:06:45 +00:00
|
|
|
/*
|
|
|
|
* Mr. 4th Dimention - Allen Webster
|
|
|
|
*
|
|
|
|
* 24.01.2018
|
|
|
|
*
|
|
|
|
* Buffer types
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
// TOP
|
|
|
|
|
|
|
|
#if !defined(FRED_BUFFER_H)
|
|
|
|
#define FRED_BUFFER_H
|
|
|
|
|
|
|
|
struct Cursor_With_Index{
|
2019-08-24 01:34:42 +00:00
|
|
|
i64 pos;
|
2018-03-24 10:06:45 +00:00
|
|
|
i32 index;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Gap_Buffer{
|
2019-09-02 18:59:36 +00:00
|
|
|
Base_Allocator *allocator;
|
2018-03-24 10:06:45 +00:00
|
|
|
|
2019-09-02 18:59:36 +00:00
|
|
|
u8 *data;
|
|
|
|
i64 size1;
|
|
|
|
i64 gap_size;
|
|
|
|
i64 size2;
|
|
|
|
i64 max;
|
2018-03-24 10:06:45 +00:00
|
|
|
|
2019-09-02 18:59:36 +00:00
|
|
|
// NOTE(allen): If there are N lines I store N + 1 slots in this array with
|
|
|
|
// line_starts[N] = size of the buffer.
|
|
|
|
// The variable line_start_count stores N + 1; call buffer_line_count(buffer)
|
|
|
|
// to get "N" the actual number of lines.
|
|
|
|
i64 *line_starts;
|
|
|
|
i64 line_start_count;
|
|
|
|
i64 line_start_max;
|
2018-03-24 10:06:45 +00:00
|
|
|
};
|
|
|
|
|
2019-06-11 23:16:27 +00:00
|
|
|
struct Buffer_Chunk_Position{
|
2019-09-02 18:59:36 +00:00
|
|
|
i64 real_pos;
|
|
|
|
i64 chunk_pos;
|
|
|
|
i64 chunk_index;
|
2018-03-24 10:06:45 +00:00
|
|
|
};
|
|
|
|
|
2019-10-27 22:37:48 +00:00
|
|
|
typedef i32 Line_Move_Kind;
|
|
|
|
enum{
|
|
|
|
LineMove_ShiftOldValues,
|
|
|
|
LineMove_MeasureString,
|
|
|
|
};
|
|
|
|
struct Line_Move{
|
|
|
|
Line_Move *next;
|
|
|
|
Line_Move_Kind kind;
|
|
|
|
i64 new_line_first;
|
|
|
|
union{
|
|
|
|
struct{
|
|
|
|
i64 old_line_first;
|
|
|
|
i64 old_line_opl;
|
|
|
|
i64 text_shift;
|
|
|
|
};
|
|
|
|
struct{
|
|
|
|
String_Const_u8 string;
|
|
|
|
i64 text_base;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2018-03-24 10:06:45 +00:00
|
|
|
#endif
|
|
|
|
|
2019-01-29 05:36:17 +00:00
|
|
|
// BOTTOM
|