diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index dc0bbc84..085c0158 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -750,134 +750,6 @@ ev2_block_range_list_from_tree(Arena *arena, EV2_BlockTree *block_tree) //////////////////////////////// //~ rjf: Row Building (v2) -internal EV2_WindowedRowList -ev2_windowed_row_list_from_block_tree(Arena *arena, EV_View *view, String8 filter, EV2_BlockTree *block_tree, Rng1U64 visible_range) -{ - EV2_WindowedRowList rows = {0}; - { - Temp scratch = scratch_begin(&arena, 1); - typedef struct BlockTask BlockTask; - struct BlockTask - { - BlockTask *next; - EV2_Block *block; - EV2_Block *next_child; - Rng1U64 block_relative_range; - }; - U64 visual_idx_off = 0; - BlockTask start_task = {0, block_tree->root, block_tree->root->first, r1u64(0, block_tree->root->visual_row_count)}; - for(BlockTask *t = &start_task; t != 0; t = t->next) - { - // rjf: get block-relative range, truncated by split position of next child - Rng1U64 block_relative_range = t->block_relative_range; - if(t->next_child != &ev2_nil_block) - { - block_relative_range.max = t->next_child->split_relative_idx+1; - } - U64 block_num_visual_rows = dim_1u64(block_relative_range); - - // rjf: get global range of this block - Rng1U64 block_global_range = r1u64(visual_idx_off, visual_idx_off + block_num_visual_rows); - - // rjf: get skip/chop of global range - U64 num_skipped = 0; - U64 num_chopped = 0; - { - if(visible_range.min > block_global_range.min) - { - num_skipped = (visible_range.min - block_global_range.min); - num_skipped = Min(num_skipped, block_num_visual_rows); - } - if(visible_range.max < block_global_range.max) - { - num_chopped = (block_global_range.max - visible_range.max); - num_chopped = Min(num_chopped, block_num_visual_rows); - } - } - - // rjf: get block-relative *windowed* range - Rng1U64 block_relative_range__windowed = r1u64(block_relative_range.min + num_skipped, - block_relative_range.max - num_chopped); - - // rjf: sum & advance - visual_idx_off += block_num_visual_rows; - rows.count_before_visual += num_skipped; - - // rjf: generate rows before next splitting child - if(block_relative_range__windowed.max > block_relative_range__windowed.min) - { - // rjf: no expansion operator applied -> push row for block expression; pass through block info - if(t->block->expand_view_rule_info == &ev_nil_view_rule_info) - { - EV2_Row *row = push_array(arena, EV2_Row, 1); - SLLQueuePush(rows.first, rows.last, row); - rows.count += 1; - row->block = t->block; - row->key = t->block->key; - row->visual_size = t->block->visual_row_count; - row->visual_size_skipped = 0; // TODO(rjf) - row->visual_size_chopped = 0; // TODO(rjf) - row->string = t->block->string; - row->expr = t->block->expr; - row->member = &e_member_nil; - row->view_rules = t->block->view_rules; - } - - // rjf: expansion operator applied -> call, and add rows for all expressions in the viewable range - else - { - EV_ExpandRangeInfo expand_range_info = t->block->expand_view_rule_info->expr_expand_range_info(arena, view, filter, t->block->expr, t->block->expand_view_rule_params, block_relative_range__windowed, t->block->expand_view_rule_info_user_data); - for EachIndex(idx, expand_range_info.row_exprs_count) - { - U64 row_visual_size = expand_range_info.row_exprs_num_visual_rows[idx]; - U64 child_num = block_relative_range.min + idx + 1; - U64 child_id = t->block->expand_view_rule_info->expr_expand_id_from_num(child_num, t->block->expand_view_rule_info_user_data); - EV2_Row *row = push_array(arena, EV2_Row, 1); - SLLQueuePush(rows.first, rows.last, row); - rows.count += 1; - row->block = t->block; - row->key = ev_key_make(ev_hash_from_key(row->block->key), child_id); - row->visual_size = row_visual_size; - row->visual_size_skipped = 0; // TODO(rjf) - row->visual_size_chopped = 0; // TODO(rjf) - row->string = t->block->string; - row->expr = expand_range_info.row_exprs[idx]; - row->member = expand_range_info.row_members[idx]; - row->view_rules = ev_view_rule_list_from_inheritance(arena, t->block->view_rules); - // TODO(rjf): mix in view rules based on row's key, row's type - } - } - } - - // rjf: generate task for child, + for post-child parts of this block - if(t->next_child != &ev2_nil_block) - { - // rjf: generate task for child - do *before* remainder (descend block tree depth first) - BlockTask *child_task = push_array(scratch.arena, BlockTask, 1); - child_task->next = t->next; - t->next = child_task; - child_task->block = t->next_child; - child_task->next_child = t->next_child->first; - child_task->block_relative_range = r1u64(0, t->next_child->visual_row_count); - - // rjf: generate task for post-child rows, if any, after children - Rng1U64 remainder_range = r1u64(t->next_child->split_relative_idx+1, t->block_relative_range.max); - if(remainder_range.max > remainder_range.min) - { - BlockTask *remainder_task = push_array(scratch.arena, BlockTask, 1); - remainder_task->next = child_task->next; - child_task->next = remainder_task; - remainder_task->block = t->block; - remainder_task->next_child = t->next_child->next; - remainder_task->block_relative_range = remainder_range; - } - } - } - scratch_end(scratch); - } - return rows; -} - internal EV2_WindowedRowList ev2_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 filter, EV2_BlockRangeList *block_ranges, Rng1U64 visible_range) { diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index 5fe39f0b..320acb40 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -517,7 +517,6 @@ internal EV2_BlockRangeList ev2_block_range_list_from_tree(Arena *arena, EV2_Blo //////////////////////////////// //~ rjf: Row Building (v2) -internal EV2_WindowedRowList ev2_windowed_row_list_from_block_tree(Arena *arena, EV_View *view, String8 filter, EV2_BlockTree *block_tree, Rng1U64 visible_range); internal EV2_WindowedRowList ev2_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 filter, EV2_BlockRangeList *block_ranges, Rng1U64 visible_range); internal String8 ev2_expr_string_from_row(Arena *arena, EV2_Row *row, EV_StringFlags flags); internal B32 ev2_row_is_expandable(EV2_Row *row);