execution_query_store.bend
bendvy-ecs-core@0.1.0.3 · 19 lines · 4 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/execution_query_matches.bend as Q
3import bendvy-ecs-core@0.1.0.3/lifecycle.bend as Life
4
5type Lookup<-V:Data> is Data:
6 OutsideDomain{}
7 Known{view:Maybe<&2,V>}
8def cached_lookup_here(-V:Data,view:Maybe<&2,V>,next:Lookup<V>,found:Bool) -> Lookup<V>:
9 match found:
10 case False{}:next
11 case True{}:Known{view}
12def cached_lookup(-V:Data,rows:List<&2,Q.Row<V>>,+offset:U32) -> Lookup<V>:
13 match rows:
14 case []:OutsideDomain{}
15 case +row <> rest:cached_lookup_here(V,Q.row_view(V,row),cached_lookup(V,rest,offset),U32.is_eq(Q.row_offset(V,row),offset))
16def cached_stamp(-V:Data,rows:List<&2,Q.Row<V>>,+index:U32) -> Life.Stamp:
17 match rows:
18 case []:Life.Stamp{None{},None{}}
19 case +row <> rest:Life.choose(U32.is_eq(index,Q.row_offset(V,row)),Q.row_stamp(V,row),cached_stamp(V,rest,index))