pretzel.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 

class PRETZEL_CNV

class PRETZEL_CNV is Pretzel2Knot(s:STR, inout knot:KNOT):BOOL is j::=s.search("endcode"); if (0<j).not then return false; end; return Pretzel2Knot(#WORD(s.substring(0,j)).w, inout knot); end; Pretzel2Knot(a:ARRAY{INT}, inout knot:KNOT):BOOL is -- Pretzel P(a0,a1,...) knot:=KNOT::NoCompo0; d::=16; d2::=d*2; -- width r,l,t_footer:KNOT; r:=KNOT::trivial0.append(KNOT::trivial0); r.CodeIn(0,0,1); r.CodeIn(d,-d,VERTEXC::cross_under,2); r.CodeIn(d2,-d2,3); r.CodeIn(d2,0,6); r.CodeIn(d,-d,VERTEXC::cross_over,7); r.CodeIn(0,-d2,8); l:=r.clone; l.mirrorZ; t_footer:=KNOT::trivial0;; t_footer.CodeIn(0,0,1); t_footer.CodeIn(0,0,2); max_t::=0; loop max_t:=max_t.max(a.elt!.abs); end; -- twist loop i::=a.ind!; t::=a.elt!; c:KNOT; if t>0 then c:=r.clone; elsif t<0 then c:=l.clone; t:=-t; end; twist::=KNOT::NoCompo0; loop t.times!; twist:=twist.append(c.clone); c.Shift(0,-d*2); end; if t<max_t then t_footer[1]:=#(0,-d2*t); t_footer[2]:=#(0,-d2*max_t); twist:=twist.append(t_footer.clone); t_footer[1]:=#(d2,-d2*t); t_footer[2]:=#(d2,-d2*max_t); twist:=twist.append(t_footer.clone); end; twist.Shift(d*4*i,0); knot:=knot.append(twist); end; -- header/footer t_footer:=KNOT::trivial0;; t_footer.CodeIn(0,0,1); t_footer.CodeIn(0,d,2); t_footer.CodeIn(d2*(a.size*2-1),d,3); t_footer.CodeIn(d2*(a.size*2-1),0,4); knot:=knot.append(t_footer); -- t_footer:=KNOT::trivial0;; t_footer.CodeIn(0,-max_t*d2,1); t_footer.CodeIn(0,-max_t*d2-d,2); t_footer.CodeIn(d*(a.size*4-2),-max_t*d2-d,3); t_footer.CodeIn(d*(a.size*4-2),-max_t*d2,4); knot:=knot.append(t_footer); -- loop i::=1.upto!(a.size-1); t_footer:=KNOT::trivial0; t_footer.CodeIn(d*(i*4-2),0,1); t_footer.CodeIn(d*i*4,0,2); knot:=knot.append(t_footer); end; -- loop i::=1.upto!(a.size-1); t_footer:=KNOT::trivial0; t_footer.CodeIn(d*(i*4-2),-d2*max_t,1); t_footer.CodeIn(d*i*4,-d2*max_t,2); knot:=knot.append(t_footer); end; -- knot.Shift(d2,-d2); knot.concat; return true; end; end;