1 import Base 2 3 # Framework physical offsets, never public entity keys or gameplay authority. 4 # Dynamic lists deliberately replace fixed-width masks and template row sets. 5 type Domain is Data: 6 Domain{offsets:List<&2,U32>} 7 type Validation is Data: 8 Valid{} 9 Duplicate{offset:U32} 10 OutOfBounds{offset:U32,capacity:U32} 11 type Access is Data: 12 Access{reads:Domain,writes:Domain} 13 14 def contains_list(+offset:U32,offsets:List<&2,U32>) -> Bool: 15 match offsets: 16 case []:False{} 17 case +head <> tail:Bool.or(U32.is_eq(offset,head),contains_list(offset,tail)) 18 def contains(domain:Domain,offset:U32) -> Bool: 19 match domain: 20 case Domain{offsets}:contains_list(offset,offsets) 21 def validate_tail(+capacity:U32,+offset:U32,next:Validation,duplicate:Bool,inRange:Bool) -> Validation: 22 match duplicate inRange: 23 case True{} _:Duplicate{offset} 24 case False{} False{}:OutOfBounds{offset,capacity} 25 case False{} True{}:next 26 def validate_list(+capacity:U32,offsets:List<&2,U32>) -> Validation: 27 match offsets: 28 case []:Valid{} 29 case +head <> +tail:validate_tail(capacity,head,validate_list(capacity,tail),contains_list(head,tail),U32.is_lt(head,capacity)) 30 def validate(capacity:U32,domain:Domain) -> Validation: 31 match domain: 32 case Domain{offsets}:validate_list(capacity,offsets) 33 def intersects_list(+right:Domain,offsets:List<&2,U32>) -> Bool: 34 match offsets: 35 case []:False{} 36 case head <> rest:Bool.or(contains(right,head),intersects_list(right,rest)) 37 def intersects(left:Domain,right:Domain) -> Bool: 38 match left: 39 case Domain{offsets}:intersects_list(right,offsets) 40 def insert(+domain:Domain,+offset:U32,present:Bool) -> Domain: 41 match domain present: 42 case domain True{}:domain 43 case Domain{offsets} False{}:Domain{offset <> offsets} 44 def union_list(offsets:List<&2,U32>,+result:Domain) -> Domain: 45 match offsets: 46 case []:result 47 case +offset <> rest:union_list(rest,insert(result,offset,contains(result,offset))) 48 def union(left:Domain,right:Domain) -> Domain: 49 match left: 50 case Domain{offsets}:union_list(offsets,right) 51 def conflicts(left:Access,right:Access) -> Bool: 52 match left right: 53 case Access{+lr,+lw} Access{+rr,+rw}:Bool.or(intersects(lw,rw),Bool.or(intersects(lw,rr),intersects(rw,lr)))