From e395ef42a15a2f36d1aff703194bcf1d27b7f2ed Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Fri, 23 Aug 2024 14:45:48 -0700 Subject: [PATCH] eval system syntax for opaque id evaluations --- src/df/core/df_core.c | 78 ++++++++++++++++++++++++------------------- src/df/core/df_core.h | 15 +++++++-- src/df/gfx/df_gfx.h | 2 +- src/eval/eval_parse.c | 9 ++++- 4 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index 51c1bf36..22e1c103 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -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 diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index 2f86711b..e56ee386 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -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 diff --git a/src/df/gfx/df_gfx.h b/src/df/gfx/df_gfx.h index fb9c984a..bd75a075 100644 --- a/src/df/gfx/df_gfx.h +++ b/src/df/gfx/df_gfx.h @@ -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; diff --git a/src/eval/eval_parse.c b/src/eval/eval_parse.c index b1691339..a2cfd90b 100644 --- a/src/eval/eval_parse.c +++ b/src/eval/eval_parse.c @@ -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; }