eval system syntax for opaque id evaluations

This commit is contained in:
Ryan Fleury
2024-08-23 14:45:48 -07:00
parent 8ae8e2f943
commit e395ef42a1
4 changed files with 65 additions and 39 deletions
+44 -34
View File
@@ -3729,6 +3729,8 @@ df_ctrl_last_stop_event(void)
////////////////////////////////
//~ rjf: Evaluation Context
//- rjf: entity <-> eval space
internal DF_Entity *
df_entity_from_eval_space(E_Space space)
{
@@ -3748,6 +3750,8 @@ df_eval_space_from_entity(DF_Entity *entity)
return space;
}
//- rjf: eval space reads/writes
internal B32
df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
{
@@ -3905,25 +3909,7 @@ 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;
}
//- rjf: asynchronous streamed reads -> hashes from spaces
internal U128
df_key_from_eval_space_range(E_Space space, Rng1U64 range)
@@ -3947,21 +3933,6 @@ df_key_from_eval_space_range(E_Space space, Rng1U64 range)
return result;
}
internal E_Eval
df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg)
{
for(DF_CfgVal *val = cfg->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
{
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_EvalResolution)
{
eval = spec->info.eval_resolution(arena, eval, val);
break;
}
}
return eval;
}
////////////////////////////////
//~ rjf: Evaluation Views
@@ -5436,6 +5407,45 @@ df_viz_row_is_editable(DF_EvalVizRow *row)
return result;
}
//- rjf: view rule config tree info extraction
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;
}
//- rjf: view rule eval application
internal E_Eval
df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg)
{
for(DF_CfgVal *val = cfg->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
{
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_EvalResolution)
{
eval = spec->info.eval_resolution(arena, eval, val);
break;
}
}
return eval;
}
////////////////////////////////
//~ rjf: Main State Accessors/Mutators
+12 -3
View File
@@ -1571,15 +1571,18 @@ internal void df_ctrl_run(DF_RunKind run, DF_Entity *run_thread, CTRL_RunFlags f
internal CTRL_Event df_ctrl_last_stop_event(void);
////////////////////////////////
//~ rjf: Evaluation Context
//~ rjf: Evaluation Spaces
//- rjf: entity <-> eval space
internal DF_Entity *df_entity_from_eval_space(E_Space space);
internal E_Space df_eval_space_from_entity(DF_Entity *entity);
//- rjf: eval space reads/writes
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);
//- rjf: asynchronous streamed reads -> hashes from spaces
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);
////////////////////////////////
//~ rjf: Evaluation Views
@@ -1647,6 +1650,12 @@ internal String8 df_expr_string_from_viz_row(Arena *arena, DF_EvalVizRow *row);
internal B32 df_viz_row_is_expandable(DF_EvalVizRow *row);
internal B32 df_viz_row_is_editable(DF_EvalVizRow *row);
//- rjf: view rule config tree info extraction
internal Rng1U64 df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg);
//- rjf: view rule eval application
internal E_Eval df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg);
////////////////////////////////
//~ rjf: Main State Accessors/Mutators
+1 -1
View File
@@ -77,7 +77,7 @@ struct DF_SettingVal
};
////////////////////////////////
//~ rjf: View Functions
//~ rjf: View Hook Function Types
typedef struct DF_View DF_View;
typedef struct DF_Panel DF_Panel;
+8 -1
View File
@@ -1688,7 +1688,14 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
{
U64 val = 0;
try_u64_from_str8_c_rules(token_string, &val);
atom = e_push_expr(arena, E_ExprKind_LeafU64, token_string.str);
if(str8_match(resolution_qualifier, str8_lit("id"), 0))
{
atom = e_push_expr(arena, E_ExprKind_LeafID, token_string.str);
}
else
{
atom = e_push_expr(arena, E_ExprKind_LeafU64, token_string.str);
}
atom->u64 = val;
break;
}