extend file streaming cache to support range-based file stream queries; begin plugging in file stream queries as alternative to ctrl stream queries; further bugfixes & unification in eval system

This commit is contained in:
Ryan Fleury
2024-08-23 12:29:52 -07:00
parent ff922fa087
commit 8ae8e2f943
10 changed files with 370 additions and 155 deletions
+42
View File
@@ -3905,6 +3905,48 @@ df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
return result;
}
internal Rng1U64
df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg)
{
Temp scratch = scratch_begin(0, 0);
E_Eval value_eval = e_value_eval_from_eval(eval);
DF_CfgNode *size_cfg = df_cfg_node_child_from_string(cfg, str8_lit("size"), 0);
String8 size_expr = df_string_from_cfg_node_children(scratch.arena, size_cfg);
E_Eval size_eval = e_eval_from_string(scratch.arena, size_expr);
E_Eval size_value_eval = e_value_eval_from_eval(size_eval);
Rng1U64 result = {0};
result.min = value_eval.value.u64;
result.max = max_U64;
if(size_eval.msgs.max_kind == E_MsgKind_Null)
{
result.max = result.min + size_value_eval.value.u64;
}
scratch_end(scratch);
return result;
}
internal U128
df_key_from_eval_space_range(E_Space space, Rng1U64 range)
{
U128 result = {0};
DF_Entity *entity = df_entity_from_eval_space(space);
switch(entity->kind)
{
//- rjf: nil space -> filesystem key encoded inside of `space`
case DF_EntityKind_Nil:
{
result = space;
}break;
//- rjf: process space -> query
case DF_EntityKind_Process:
{
result = ctrl_hash_store_key_from_process_vaddr_range(entity->ctrl_machine_id, entity->ctrl_handle, range, 0);
}break;
}
return result;
}
internal E_Eval
df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg)
{
+2
View File
@@ -1577,6 +1577,8 @@ internal DF_Entity *df_entity_from_eval_space(E_Space space);
internal E_Space df_eval_space_from_entity(DF_Entity *entity);
internal B32 df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range);
internal B32 df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range);
internal Rng1U64 df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg);
internal U128 df_key_from_eval_space_range(E_Space space, Rng1U64 range);
internal E_Eval df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg);
////////////////////////////////