#read "everything.txt": ourGasket:=proc(lvl,numFuncsInMem,maxFuncNum,filenm) local T,i; T:=gasket(lvl); T[[0],1000]:=filenm; T[[1],1000]:=numFuncsInMem; T[[2],1000]:=table();#funcs currently in mem, really a lookup in 3 for i from 1 to maxFuncNum do T[[2],1000][i]:=-2; end do; T[[3],1000]:=[];#list of funcs in memory T[[4],1000]:=[];#coorespoding list of logical func nums T[[5],1000]:=maxFuncNum; T[[6],1000]:=lvl; return(T); end; #-2 means has never been made #-1 means has been swapped out clearFuncPrivate:=proc(T,level,func) local vm, v; vm:=vertices(level); for v in vm do T[v,func]:=0; end do; end; readFuncPrivate:=proc(T,funcnum,nfname) local fd,fname,level,vers,vertex; fname:=nfname; fd:=fopen(fname,READ); level:=fscanf(fd,"%d\n")[1]; vers:=vertices(level); for vertex in vers do T[vertex,funcnum]:=fscanf(fd,"%g\n")[1]; end do; fclose(fd); RETURN(level); end; saveFuncPrivate:=proc(T,funcnum,level,nfname) local fd,vers,vertex,i,fname; fname:=nfname; fd:=fopen(fname,WRITE); fprintf(fd,"%d\n",level); vers:=vertices(level); for vertex in vers do fprintf(fd,"%20.20g\n",T[vertex,funcnum]); end do; fclose(fd); end; writeOut:=proc(T,index) saveFuncPrivate(T,T[[3],1000][index],T[[6],1000],cat(T[[0],1000],".",T[[4],1000][index])); end; allocFunc:=proc(T,fnum) local nfuncnum,i; if T[[1],1000]>nops(T[[3],1000]) then T[[3],1000]:=[op(T[[3],1000]),8+nops(T[[3],1000])]; T[[4],1000]:=[op(T[[4],1000]),fnum]; else writeOut(T,1); T[[2],1000][T[[4],1000][1]]:=-1; nfuncnum:=T[[3],1000][1]; T[[3],1000]:=subsop(1=NULL,T[[3],1000]); T[[4],1000]:=subsop(1=NULL,T[[4],1000]); for i in T[[4],1000] do T[[2],1000][i]:=T[[2],1000][i]-1; end do; T[[3],1000]:=[op(T[[3],1000]),nfuncnum]; T[[4],1000]:=[op(T[[4],1000]),fnum]; end if; return(nops(T[[3],1000])); end; getFunc:=proc(T,fnum) local h; if T[[2],1000][fnum]<0 then h:=T[[2],1000][fnum]; T[[2],1000][fnum]:=allocFunc(T,fnum); if h=-2 then #clearfunc? clearFuncPrivate(T,T[[6],1000],T[[3],1000][T[[2],1000][fnum]]); else readFuncPrivate(T,T[[3],1000][T[[2],1000][fnum]],cat(T[[0],1000],".",fnum)); end if; end if; return(T[[3],1000][T[[2],1000][fnum]]); end; setFunc:=proc(T,fnum,vertex,val) local i; i:=getFunc(T,fnum); T[vertex,i]:=val; return (val); end; checkFunc:=proc(T,fnum,vertex) local i; i:=getFunc(T,fnum); return(T[vertex,i]); end; getFuncNum:=proc(T,fnum) return(getFunc(T,fnum)); end;