execution_inspector.bend

bendvy-ecs-core@0.1.0.3 · 21 lines · 5 definitions

1import Base
2import bendvy-ecs-core@0.1.0.3/inspector.bend as Inspector
3import bendvy-ecs-core@0.1.0.3/check.bend as Check
4import bendvy-ecs-core@0.1.0.3/capabilities.bend as Cap
5import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as Layout
6import bendvy-ecs-core@0.1.0.3/execution_layout_access.bend as Access
7import bendvy-ecs-core@0.1.0.3/resource_field.bend as Field
8import bendvy-ecs-core@0.1.0.3/execution_declaration.bend as Declaration
9
10type Resource<-H:Type,-V:Data> is Type:
11  Resource{read:Cap.ValueRead<H,V>,uses:List<&2,Declaration.Access>}
12def resource(~S:Data,~C:Type,~R:Type,~E:Data,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool}) -> Resource<Inspector.Frame<S,C,R,E>,Layout.view(layout,route)>:
13  Resource{Inspector.read_resource(~S,~C,~R,~E,~Layout.view(layout,route),~Field.project(~R,~Access.resource_slot(~S,layout,route),~Layout.resource_rest(~S,layout,route),~Layout.view(layout,route),~Access.resource_lens(~S,~R,~layout,~route,~same),~Access.resource_view(~S,~layout,~route))),[Declaration.Access{Layout.key(layout,route),Declaration.ResourceAccess{},Declaration.Exclusive{},Declaration.ReadOnly{}}]}
14def check_resource(~S:Data,~C:Type,~R:Type,~E:Data,~layout:Layout.Layout,~route:Layout.Route,~same:{R == Layout.resources(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool}) -> Resource<Check.Frame<S,C,R,E>,Layout.view(layout,route)>:
15  Resource{Check.resource_grant(~S,~C,~R,~E,~Layout.view(layout,route),~Field.project(~R,~Access.resource_slot(~S,layout,route),~Layout.resource_rest(~S,layout,route),~Layout.view(layout,route),~Access.resource_lens(~S,~R,~layout,~route,~same),~Access.resource_view(~S,~layout,~route))),[Declaration.Access{Layout.key(layout,route),Declaration.ResourceAccess{},Declaration.Exclusive{},Declaration.ReadOnly{}}]}
16def resource_grant(~H:Type,~V:Data,value:Resource<H,V>) -> Cap.ValueRead<H,V>:
17  match value:
18    case Resource{read,_}:read
19def resource_uses(~H:Type,~V:Data,value:Resource<H,V>) -> List<&2,Declaration.Access>:
20  match value:
21    case Resource{_,uses}:uses