107 lines
1.8 KiB
C
107 lines
1.8 KiB
C
/*
|
|
* Mr. 4th Dimention - Allen Webster
|
|
*
|
|
* 24.01.2018
|
|
*
|
|
* Buffer types
|
|
*
|
|
*/
|
|
|
|
// TOP
|
|
|
|
#if !defined(FRED_BUFFER_H)
|
|
#define FRED_BUFFER_H
|
|
|
|
struct Cursor_With_Index{
|
|
i64 pos;
|
|
i32 index;
|
|
};
|
|
|
|
struct Gap_Buffer{
|
|
Base_Allocator *allocator;
|
|
|
|
u8 *data;
|
|
i64 size1;
|
|
i64 gap_size;
|
|
i64 size2;
|
|
i64 max;
|
|
|
|
// 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;
|
|
};
|
|
|
|
struct Buffer_Chunk_Position{
|
|
i64 real_pos;
|
|
i64 chunk_pos;
|
|
i64 chunk_index;
|
|
};
|
|
|
|
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;
|
|
};
|
|
};
|
|
};
|
|
|
|
typedef u32 Buffer_Layout_Flag;
|
|
enum{
|
|
BRFlag_Special_Character = (1 << 0),
|
|
BRFlag_Ghost_Character = (1 << 1)
|
|
};
|
|
|
|
struct Buffer_Layout_Item{
|
|
i64 index;
|
|
u32 codepoint;
|
|
Buffer_Layout_Flag flags;
|
|
Rect_f32 rect;
|
|
};
|
|
|
|
struct Buffer_Layout_Item_Block{
|
|
Buffer_Layout_Item_Block *next;
|
|
Buffer_Layout_Item *items;
|
|
i64 count;
|
|
i64 character_count;
|
|
};
|
|
|
|
struct Buffer_Layout_Item_List{
|
|
Buffer_Layout_Item_Block *first;
|
|
Buffer_Layout_Item_Block *last;
|
|
i32 node_count;
|
|
i32 total_count;
|
|
f32 height;
|
|
f32 bottom_extension;
|
|
i64 character_count;
|
|
Interval_i64 index_range;
|
|
};
|
|
|
|
#if 0
|
|
struct Edit_Array{
|
|
Edit *vals;
|
|
i32 count;
|
|
};
|
|
#endif
|
|
|
|
#endif
|
|
|
|
// BOTTOM
|