mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-23 04:04:59 -07:00
text cache scope tree lookup paths
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user