eval visualization: first pass of new tree-ified block building, which preserves the hierarchy of the eval visualization path, as well as relies on only a single view rule hook; first pass of windowed row list production, given that block tree build; also still just uses the single hook

This commit is contained in:
Ryan Fleury
2024-09-25 12:23:50 -07:00
parent c976154284
commit 9c3d2cd5ab
5 changed files with 300 additions and 34 deletions
@@ -108,6 +108,8 @@ struct EV_ExpandResult
U64 total_visual_row_count;
U64 row_exprs_count;
E_Expr **row_exprs;
E_Member **row_members;
U64 *row_exprs_num_visual_rows;
};
////////////////////////////////
@@ -237,6 +239,79 @@ struct EV_ViewRuleInfoTable
U64 slots_count;
};
////////////////////////////////
//~ rjf: Blocks (v2)
typedef struct EV2_Block EV2_Block;
struct EV2_Block
{
// rjf: links
EV2_Block *first;
EV2_Block *last;
EV2_Block *next;
EV2_Block *prev;
EV2_Block *parent;
// rjf: key
EV_Key key;
// rjf: split index, relative to parent's space
U64 split_relative_idx;
// rjf: expression / visualization info
String8 string;
E_Expr *expr;
EV_ViewRuleList *view_rules;
EV_ViewRuleInfo *expand_view_rule_info;
MD_Node *expand_view_rule_params;
// rjf: expansion info
U64 semantic_row_count;
U64 visual_row_count;
};
typedef struct EV2_BlockTree EV2_BlockTree;
struct EV2_BlockTree
{
EV2_Block *root;
U64 total_semantic_row_count;
U64 total_visual_row_count;
};
////////////////////////////////
//~ rjf: Rows (v2)
typedef struct EV2_Row EV2_Row;
struct EV2_Row
{
EV2_Row *next;
// rjf: block hierarchy info
EV2_Block *block;
EV_Key key;
// rjf: row size/scroll info
U64 visual_size;
U64 visual_size_skipped;
U64 visual_size_chopped;
// rjf: expression / visualization info
String8 string;
E_Expr *expr;
E_Member *member;
EV_ViewRuleList *view_rules;
};
typedef struct EV2_WindowedRowList EV2_WindowedRowList;
struct EV2_WindowedRowList
{
EV2_Row *first;
EV2_Row *last;
U64 count;
U64 count_before_visual;
U64 count_before_semantic;
};
////////////////////////////////
//~ rjf: Automatic Type -> View Rule Map Types
@@ -320,6 +395,7 @@ global read_only EV_ViewRuleInfo ev_nil_view_rule_info = {0};
thread_static EV_ViewRuleInfoTable *ev_view_rule_info_table = 0;
global read_only EV_ViewRuleList ev_nil_view_rule_list = {0};
thread_static EV_AutoViewRuleTable *ev_auto_view_rule_table = 0;
global read_only EV2_Block ev2_nil_block = {&ev2_nil_block, &ev2_nil_block, &ev2_nil_block, &ev2_nil_block, &ev2_nil_block, {0}, 0, {0}, &e_expr_nil, &ev_nil_view_rule_list, &ev_nil_view_rule_info};
////////////////////////////////
//~ rjf: Key Functions
@@ -380,6 +456,12 @@ internal EV_ViewRuleList *ev_view_rule_list_copy(Arena *arena, EV_ViewRuleList *
internal E_Expr *ev_expr_from_expr_view_rules(Arena *arena, E_Expr *expr, EV_ViewRuleList *view_rules);
////////////////////////////////
//~ rjf: Block Building (v2)
internal EV2_BlockTree ev2_block_tree_from_expr(Arena *arena, EV_View *view, String8 string, E_Expr *expr, EV_ViewRuleList *view_rules);
internal EV2_WindowedRowList ev2_windowed_row_list_from_block_tree(Arena *arena, EV_View *view, EV2_BlockTree *block_tree, Rng1U64 visible_range);
////////////////////////////////
//~ rjf: Block Building