text cache scope tree lookup paths

This commit is contained in:
Ryan Fleury
2025-08-05 16:11:49 -07:00
parent 5a5fd53bfa
commit 230f452edb
3 changed files with 317 additions and 264 deletions
+49
View File
@@ -2086,6 +2086,55 @@ txt_line_tokens_slice_from_info_data_line_range(Arena *arena, TXT_TextInfo *info
return result;
}
internal TXT_ScopeNode *
txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num)
{
TXT_ScopeNode *result = &txt_scope_node_nil;
if(1 <= num && num <= info->scope_nodes.count)
{
result = &info->scope_nodes.v[num-1];
}
return result;
}
internal TXT_ScopeNode *
txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off)
{
TXT_ScopeNode *result = &txt_scope_node_nil;
{
U64 first = 0;
U64 opl = info->scope_pts.count;
for(;;)
{
U64 mid = (opl - first) / 2;
if(mid >= info->scope_pts.count) { break; }
U64 mid_off = info->tokens.v[info->scope_pts.v[mid].token_idx].range.min;
if(off == mid_off || (first == mid && opl == mid+1))
{
result = &info->scope_nodes.v[info->scope_pts.v[mid].scope_idx];
break;
}
else if(off < mid_off)
{
opl = mid;
}
else if(mid_off < off)
{
first = mid;
}
}
}
return result;
}
internal TXT_ScopeNode *
txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt)
{
U64 off = txt_off_from_info_pt(info, pt);
TXT_ScopeNode *result = txt_scope_node_from_info_data_off(info, off);
return result;
}
////////////////////////////////
//~ rjf: Transfer Threads
+4
View File
@@ -258,6 +258,7 @@ struct TXT_Shared
////////////////////////////////
//~ rjf: Globals
read_only global TXT_ScopeNode txt_scope_node_nil = {0};
thread_static TXT_TCTX *txt_tctx = 0;
global TXT_Shared *txt_shared = 0;
@@ -320,6 +321,9 @@ internal Rng1U64 txt_expr_off_range_from_info_data_pt(TXT_TextInfo *info, String
internal String8 txt_string_from_info_data_txt_rng(TXT_TextInfo *info, String8 data, TxtRng rng);
internal String8 txt_string_from_info_data_line_num(TXT_TextInfo *info, String8 data, S64 line_num);
internal TXT_LineTokensSlice txt_line_tokens_slice_from_info_data_line_range(Arena *arena, TXT_TextInfo *info, String8 data, Rng1S64 line_range);
internal TXT_ScopeNode *txt_scope_node_from_info_num(TXT_TextInfo *info, U64 num);
internal TXT_ScopeNode *txt_scope_node_from_info_data_off(TXT_TextInfo *info, U64 off);
internal TXT_ScopeNode *txt_scope_node_from_info_data_pt(TXT_TextInfo *info, TxtPt pt);
////////////////////////////////
//~ rjf: Parse Threads