reptable.sa


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


class REP_TABLE{STK,ET}

class REP_TABLE{STK,ET} is --Make a table of representations. --If checkEq is called, -- check if cunjugate to representation in the table. -- i.e. It return true if the representation is new upto conjugate. -- 2002/12 SL2(p) version -- 1996/10 LINUX version for S(n) -- -- 1993/12/30 checkEqG -- attr rep_tbl:ARRAY{ARRAY{ET}}; create:SAME is res:SAME:=new; res.rep_tbl:=#; return res; end; private SetTable(stack:STK, checkTra:ARRAY{INT}, num:INT) is s::=rep_tbl.size; rep_tbl:=rep_tbl.resize(s+1); rep_tbl[s]:=#(num.card.min(checkTra.size)); loop i::=rep_tbl[s].ind!; rep_tbl[s][i]:=stack.st[checkTra[i].card].copy; end; end; checkEqTbl(inout stack:STK, checkTra:ARRAY{INT}, num:INT, cnj_class:INT, Rback:CARD):BOOL is -- true if new Rep -- cnj_class is pointer of stack. -- RBack : area for equivalence check of rep. (# of Pd when GenConj failed.) eqFlg:BOOL; if rep_tbl.size=0 then SetTable(stack,checkTra,num); return true; end; stack.Fetch(checkTra[0]); stack.st[Rback]:=rep_tbl[0][0]; stack.Fetch(Rback); if ~ stack.Eq then -- start of new conjugacy class. -- Note that the first entry of the table is -- a element of the conjugacy class generated by 'setFY'. rep_tbl:=#; SetTable(stack,checkTra,num); return true; else loop r::=rep_tbl.ind!; loop i::=rep_tbl[r].ind!; stack.st[i+Rback]:=rep_tbl[r][i]; end; stack.Fetch(cnj_class); stack.InitConj; -- use InitGen or InitConj loop while!(stack.GenConj); -- use Gen or GenConj loop i::=rep_tbl[r].ind!; stack.Conjugate(checkTra[i],-stack.pt.int); stack.Fetch(i+Rback); eqFlg:=stack.Eq; if ~eqFlg then break!; end; end; if eqFlg then stack.GenConjDispose; return false; end; end; end; SetTable(stack,checkTra,num); return true; end; end; end;