captured_schedule_query.bend

bendvy-ecs-core@0.1.0.0 · 31 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.0/world.bend as W
3import bendvy-ecs-core@0.1.0.0/local.bend as Local
4import bendvy-ecs-core@0.1.0.0/transaction.bend as T
5import bendvy-ecs-core@0.1.0.0/compose.bend as Q
6import bendvy-ecs-core@0.1.0.0/ordinary_query_declaration.bend as Decl
7import bendvy-ecs-core@0.1.0.0/ordinary_capture_query.bend as O
8import bendvy-ecs-core@0.1.0.0/captured_schedule_composition.bend as Comp
9type Leaf<-S:Data,-C:Type,-R:Type,-E:Data,-L:Type,-Ops:Type -> Type,-A:Data,-U:Data,-Out:Data,-query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,-body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out))> is Type:
10  Leaf{owner:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,args:A,enabled:Bool}
11def bind(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),owner:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,args:A,enabled:Bool) -> Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>:
12  Leaf{owner,args,enabled}
13def catalog(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),leaf:Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>) -> Leaf<S,C,R,E,L,Ops,A,U,Out,query,body> & List<&2,Comp.Identity>:
14  match leaf:
15    case Leaf{O.Owner{Local.Instance{+ns,+id,+name,+access,capture},cursor},args,enabled}:(Leaf{O.Owner{Local.Instance{ns,id,name,access,capture},cursor},args,enabled},[Comp.Identity{ns,id,name,access}])
16def returned(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),args:A,enabled:Bool,result:O.Run<W.World<S,C,R,E>,O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body>,A,Q.Error<U>,Out>) -> Comp.Outcome<W.World<S,C,R,E>,Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,Q.Error<U>>:
17  match result:
18    case O.Completed{world,owner,Done{_}}:Comp.Completed{world,Leaf{owner,args,enabled}}
19    case O.Completed{world,owner,Fail{error}}:Comp.Failed{world,Leaf{owner,args,enabled},error}
20    case O.Refused{world,owner,_}:Comp.Refused{world,Leaf{owner,args,enabled}}
21def skipped(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),args:A,result:O.Owner<S,C,R,E,L,Ops,A,U,Out,query,body> & W.World<S,C,R,E>) -> Comp.Outcome<W.World<S,C,R,E>,Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,Q.Error<U>>:
22  match result:
23    case (owner,world):Comp.Skipped{world,Leaf{owner,args,False{}}}
24def selected(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),allowed:Bool,leaf:Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,world:W.World<S,C,R,E>) -> Comp.Outcome<W.World<S,C,R,E>,Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,Q.Error<U>>:
25  match allowed leaf:
26    case False{}, leaf:Comp.Refused{world,leaf}
27    case True{}, Leaf{owner,args,False{}}:skipped(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,args,O.skip(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,owner,world))
28    case True{}, Leaf{owner,+args,True{}}:returned(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,args,True{},O.run(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,owner,world,args))
29def dispatch(~S:Data,~C:Type,~R:Type,~E:Data,~L:Type,~Ops:Type -> Type,~A:Data,~U:Data,~Out:Data,~query:Decl.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>)>,~body:@-H:Type -> @-caps:Ops(H) -> L -> A -> H -> H & (L & (T.Outcome<U> & Out)),leaf:Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,world:W.World<S,C,R,E>,id:U32) -> Comp.Outcome<W.World<S,C,R,E>,Leaf<S,C,R,E,L,Ops,A,U,Out,query,body>,Q.Error<U>>:
30  match leaf:
31    case Leaf{O.Owner{Local.Instance{ns,+actual,name,access,capture},cursor},args,enabled}:selected(~S,~C,~R,~E,~L,~Ops,~A,~U,~Out,~query,~body,U32.is_eq(actual,id),Leaf{O.Owner{Local.Instance{ns,actual,name,access,capture},cursor},args,enabled},world)