def subtree_take
bendvy-ecs-core@0.1.0.3 · execution_composer_layout.bend:234
import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as ExecutionComposerLayout
import Base
import bendvy-ecs-core@0.1.0.3/owner_product.bend as Product
234def subtree_take(~S:Data,layout:Layout,route:Route,owner:columns(~S,layout)) -> subtree_rest(~S,layout,route) & columns(~S,subtree(layout,route)):
235 match layout route owner:
236 case layout AtLeaf{} owner:(Unit{},owner)
237 case EmptyLayout{} InLeft{_} owner:(owner,Unit{})
238 case EmptyLayout{} InRight{_} owner:(owner,Unit{})
239 case LayoutLeaf{_,V,_,_,_} InLeft{_} owner:(owner,Unit{})
240 case ClassifiedLayoutLeaf{_,V,_,_,_,_} InLeft{_} owner:(owner,Unit{})
241 case LayoutLeaf{_,V,_,_,_} InRight{_} owner:(owner,Unit{})
242 case ClassifiedLayoutLeaf{_,V,_,_,_,_} InRight{_} owner:(owner,Unit{})
243 case LayoutPair{left,right} InLeft{rest} Product.Owner{l,r}:subtree_joined(columns(~S,right),subtree_rest(~S,left,rest),columns(~S,subtree(left,rest)),r,subtree_take(~S,left,rest,l))
244 case LayoutPair{left,right} InRight{rest} Product.Owner{l,r}:subtree_joined(columns(~S,left),subtree_rest(~S,right,rest),columns(~S,subtree(right,rest)),l,subtree_take(~S,right,rest,r))