code wiki / (root) / nx_profile_contract.nx

nx_profile_contract.nx source

↩ module page · 45 lines · 1791 B

1// Profile measurement qualification contract v2. S rows remain raw measurements. 2// Q y part_a part_b reason runs points declares ambiguous region assignment. 3// reason=1: projected union cannot isolate the requested anatomical regions. 4// Return 0 qualified, 1 ambiguous, -1 malformed/unsupported, -2 legacy unqualified. 5// Caller supplies info[5]. This validator does not validate mesh or numeric S rows. 6func profile_contract_scan(b:*u8,len:i64,info:*i64)->i64 { 7 var z:i64=0;while z<5{info[z]=0;z=z+1} 8 var i:i64=0;var seen:i64=0 9 while i<len { 10 var e:i64=i;while e<len{if b[e]==(10 as u8){break}e=e+1} 11 var j:i64=i;while j<e{if b[j]!=(32 as u8){if b[j]!=(9 as u8){break}}j=j+1} 12 if j<e{ 13 let tag:i64=b[j] as i64 14 if tag==86 {if seen!=0{return 0-1}seen=1 15 j=j+1;while j<e{if b[j]!=(32 as u8){if b[j]!=(9 as u8){break}}j=j+1} 16 if j>=e{return 0-1}if b[j]!=(50 as u8){return 0-1}j=j+1 17 while j<e{if b[j]!=(32 as u8){if b[j]!=(9 as u8){if b[j]!=(13 as u8){return 0-1}}}j=j+1} 18 info[0]=2 19 } 20 if tag==81 { 21 var field:i64=0;var val:i64=0;var digits:i64=0;j=j+1 22 var y:i64=0;var a:i64=0;var c:i64=0 23 while j<=e{ 24 var ch:i64=32;if j<e{ch=b[j] as i64} 25 if ch>=48{if ch<=57{if val>922337203685477580{return 0-1}if val==922337203685477580{if ch>55{return 0-1}}val=val*10+ch-48;digits=digits+1}else{return 0-1}} 26 else{if ch!=32{if ch!=9{if ch!=13{return 0-1}}} 27 if digits>0{ 28 if field==0{y=val}if field==1{a=val}if field==2{c=val} 29 if field==3{if val!=1{return 0-1}} 30 field=field+1;val=0;digits=0 31 } 32 } 33 j=j+1 34 } 35 if field!=6{return 0-1} 36 if info[1]==0{info[2]=y;info[3]=a;info[4]=c} 37 info[1]=info[1]+1 38 } 39 } 40 i=e+1 41 } 42 if seen==0{if info[1]>0{return 0-1}return 0-2} 43 if info[1]>0{return 1} 44 return 0 45}