cov_prim.sa


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

class COV_PRIM

class COV_PRIM is --primitives for covering space and covering linkage. --prints --relation in coverings --relation matrix -- 1989 Cover K.Kodama --1998/05 --LongInt version -- --1996/10 --LINUX version -- --1992/6/28 --split from cover.mod ---------- print routines ----------- LonPrint(compo:INT, Mer:INT, Lon:WORD) is s:STR; s:="meridian: "+WORD::gstr(Mer.int,0.int)+"\n"+" -"+"->"; REP::rcode.stack.Fetch(REP::rcode.merPtr.int+compo); s:=s+REP::rcode.stack.get_str+"\n"; #LOGOUT+s; s:="longitude: "+Lon.wstr+"\n"+" -"+"->"; REP::rcode.stack.Fetch(REP::rcode.longPtr.int+compo); s:=s+REP::rcode.stack.get_str+"\n"; #LOGOUT+s; end; OrbitPrintLog(compo:INT, NOrbit:CARD) is oFlg:BOOL; s:STR; s:="\n"+"Covering link: "+NOrbit.str+" component"; if NOrbit>1 then s:=s+"s"; end; loop o::=1.upto!(REP::rcode.stack.st[REP::rcode.orbitpPtr.int+compo][0]); s:=s+"\n"+"br. index: "+REP::rcode.stack.st[REP::rcode.orbitmPtr.int+compo][o].str +"/ orbit of peripheral: "; oFlg:=false; loop j::=1.upto!(REP::rcode.stack.Jn) ; if REP::rcode.stack.st[REP::rcode.orbitpPtr.int+compo][j]=o then if oFlg then s:=s+","; end; s:=s+j.str; oFlg:=true; end; end; end; #LOGOUT+s; end; --------------Branch index--------------------- SetLongitude(TCode:TCODE, compo:INT, out Mer:INT, out Lon:WORD) is -- set mer & Lon[*] -- set -- st[longPtr+compo]:longitude. -- st[merPtr+compo]]:meridian. -- Lon[*]: word of longitude stp:INT:=TCode.compoStart(compo); enp:INT:=TCode.endOfString(stp,1.int); Mer:=TCode[stp].gen; l:INT:=0; copt:INT; Lon:=#; loop i::=stp.upto!(enp); if VERTEXC::under.in(TCode[i].sep) then copt:=TCode[i].companion; if VERTEXC::positive.in(TCode[i].sep) then Lon.append(TCode[copt].gen); if TCode[copt].compo=compo then l:=l+1; end; else Lon.append(-TCode[copt].gen); if TCode[copt].compo=compo then l:=l-1; end; end; end; end; if Lon.size>0 then s:INT; if l.is_pos then s:=-TCode[enp].gen; else s:=TCode[enp].gen; end; loop l.abs.times!; Lon.append(s); end; else Lon.w:=#(|Mer, -Mer|); end; REP::rcode.stack.CMul(Lon.w); REP::rcode.stack.Store(REP::rcode.longPtr+compo.card); REP::rcode.stack.Fetch(Mer); REP::rcode.stack.Store(REP::rcode.merPtr+compo.card); end; SetBranchIndex(compo:INT) is bi:CARD; REP::rcode.stack.st[REP::rcode.orbitmPtr+compo.card].to_val(0); REP::rcode.stack.Fetch(REP::rcode.merPtr+compo.card); REP::rcode.stack.Store(REP::rcode.Work); loop i::=1.upto!(REP::rcode.stack.Jn); p::=i; loop bi:=1.up!; p:=REP::rcode.stack.st[REP::rcode.Work][p]; until!(i=p); end; o::=REP::rcode.stack.st[REP::rcode.orbitpPtr+compo.card][i]; REP::rcode.stack.st[REP::rcode.orbitmPtr+compo.card][o]:=bi; end; end; SetWindLong(compo:INT) is --Set st[windLon+compo] winding of the covering longitude i,i0,wind:CARD; loop cvComp::=1.upto!(REP::rcode.stack.st[REP::rcode.orbitpPtr+compo.card][0]); REP::rcode.stack.st[REP::rcode.Work].to_val(0); loop i0:=1.up!; while!(REP::rcode.stack.st[REP::rcode.orbitpPtr+compo.card][i0]/=cvComp); end; i:=i0; loop REP::rcode.stack.st[REP::rcode.Work][i]:=1; i:=REP::rcode.stack.st[REP::rcode.longPtr+compo.card][i]; until!(i=i0); end; wind:=0; loop if REP::rcode.stack.st[REP::rcode.Work][i]=1 then wind:=wind+1; end; i:=REP::rcode.stack.st[REP::rcode.merPtr+compo.card][i]; until!(i=i0); end; REP::rcode.stack.st[REP::rcode.windLon+compo.card][cvComp]:=wind; #OUT+"wind: "+wind.str+"\n"; end; end; SetOrbits(compo:INT, out NOrbit:CARD) is -- st[orbitpPtr+compo]: orbit table of meridian. -- NOrbit: number of Orbit=covering link. -- st[orbitmPtr+compo]: table of Branch index. -- orbits of meridian & longitude in S(Jn). REP::rcode.stack.Fetch(REP::rcode.merPtr.int+compo); REP::rcode.stack.Fetch(REP::rcode.longPtr.int+compo); REP::rcode.stack.OrbitC(2); REP::rcode.stack.Store(REP::rcode.orbitpPtr.int+compo); NOrbit:=REP::rcode.stack.st[REP::rcode.orbitpPtr.int+compo][0]; SetBranchIndex(compo); end;
rm1(el:INT) is REP::rcode.stack.Fetch(el); REP::rcode.stack.Mul; REP::rcode.stack.Store(REP::rcode.Work); REP::rcode.stack.Pu; end; Relation(word:WORD, base:INT, rm2:ROUT{INT,INT}) is -- relation in covering sp. z:INT:=REP::rcode.Work.int; REP::rcode.stack.Unit; REP::rcode.stack.Store(z); REP::rcode.stack.Pu; -- word.printD; loop el:INT:=word.w.elt!; if el>0.int then rm2.call(el,REP::rcode.stack.st[z][base].int); --#OUT+WORD::gstr(el,REP::rcode.stack.st[z][base])+" "; rm1(el); else rm1(el); rm2.call(el,REP::rcode.stack.st[z][base].int); --#OUT+WORD::gstr(el,REP::rcode.stack.st[z][base])+" "; end; end; -- #OUT+"\n"; REP::rcode.stack.Pd; end; end;