FILE *fop, *fip; double begintime, endtime, deltatime, totaltime;
Logic msgctrl, msghol; int msgincr, msgnext;
Logic mendel, rfill, pcomp; int maxrow, rfactor, cfactor, comppc, nrinsgp, lahead; int tlimit, hlimit, llimit, lcount; int nalive, maxcos, totcos; int chead, ctail; int pdefn; float ffactor; int pdsiz, *pdqcol, *pdqrow, toppd, botpd; int dedsiz, *dedrow, *dedcol, topded, dedmode;
Logic disded; int *edp, *edpbeg, *edpend; int ncol, **colptr, *col1ptr, *col2ptr, *invcol; int ndrel, *relind, *relexp, *rellen, *relators; int nsgpg, *subggen, *subgindex, *subglength;
Logic sgdone; int knr, knh, nextdf;
#ifdef AL0_STAT int cdcoinc; /* primary D-coincidences in _cdefn()/_rpefn() */ int rdcoinc; /* primary R-coincidences in _rdefn()/_rpefn() */ int apcoinc; /* primary coincidences in _apply() */ int rlcoinc; /* primary coincidences in _rl() */ int clcoinc; /* primary coincidences in _cl() */ int xcoinc; /* calls to _coinc() */ int xcols12; /* calls to _cols12() */ int qcoinc; /* number of actual coincs queued */
int xsave12; /* calls to SAVE12() */ int s12dup; /* number of duplicates */ int s12new; /* number of new ones */
/* The number of column 1 table accesses for CREP is xcrep+crepred+crepwrk.
For COMPRESS, the number is xcomp+2*compwrk. */
int xcrep; /* calls to CREP() */ int crepred; /* number involving redundant cosets */ int crepwrk; /* number of `links' followed */ int xcomp; /* calls to COMPRESS() */ int compwrk; /* number of `links' altered */
int xsaved; /* calls to SAVED() */ int sdmax; /* max (used) size of dedn stack */ int sdoflow; /* number of dedn stack overflows */
int xapply; /* calls to _apply() */ int apdedn; /* number of dedn in _apply() */ int apdefn; /* number of defn in _apply() */
int rldedn; /* number of dedn in _rl() */ int cldedn; /* number of dedn in _cl() */
int xrdefn; /* calls to _rdefn()/_rpefn() */ int rddedn; /* number of R-dedn in _rdefn()/_rpefn() */ int rddefn; /* number of defn in _rdefn()/_rpefn() */ int rdfill; /* number of fill in _rdefn()/_rpefn() */
int xcdefn; /* calls to _cdefn() */ int cddproc; /* number of dedn processed (ie, unstacked) */ int cdddedn; /* number of coinc dedn (ie, dead) */ int cddedn; /* number of dedn (in dedn processing) */ int cdgap; /* number of gap of len 1 */ int cdidefn; /* number of immediate defn */ int cdidedn; /* number of immediate dedn */ int cdpdl; /* number of pd listed */ int cdpof; /* number of pdl overflows */ int cdpdead; /* number of dead pd */ int cdpdefn; /* number of pref defn */ int cddefn; /* number of defn */ #endif
/* If the scan completed, then i = ifront & iback = cos, and we'll fall rightthroughandcheckforacoincidence(i.e.,hasifrontcycledback
to cos or not?). Else, there's a hole & a backward scan is required. */
if (i == 0)
{ for (bwd = end; bwd >= fwd; bwd--)
{
j = *bwd;
ji = invcol[j];
if ((i = CT(iback, ji)) > 0)
{ iback = i; } else/* Scan stalled */
{ if (bwd == fwd)
{ /* The backward scan has only one gap, so note the deduction to
complete the cycle. */
CT(iback, ji) = ifront; if (save)
{ SAVED(iback, ji); }
/* Since bwd == fwd and there was a hole, then either CT(ifront,j)isstill0,orithasbeensetbya`backward' definition(particularlyifj'saninvolution).Ifithasbeen set(on-the-fly,sotospeak),weneedtosetupcorrectlyfora
possible coincidence. */
if (CT(ifront,j) > 0)
{ ifront = CT(ifront,j); } /* May be a coincidence here */ else
{
CT(ifront,j) = iback;
ifront = iback; /* Prevent false coincidence */
}
INCR(apdedn);
} elseif (defn) /* Define a new coset */
{ /* Note that, if j is an involution, and occurs next to itself, thenafterthefirstdefn,theremainderofthestringofj's willclose.Notethatifj^2=1&jis_not_beingtreatedas aninvolution,then`removing'itisaTietzetransformation,not
a free reduction! */
/* Since we're _not_ making definitions, there is no need to check ifCT(ifront,i)isstillundefined.The_only_casewhereit's notisififront=iback&i=ii;ie,i'saninvolution&we'vejust deducedthatifront.i=ifront.So,wemaysetCT(ifront,i)twice,
but that's rare & does no damage, and is cheaper than checking. */
staticint al0_rdefn(int cnt, Logic fillr, Logic saved)
{ int i, j, k, l, m, mi, n; int *beg, *end, *fwd, *bwd; int col, ifront, iback;
INCR(xrdefn);
/* Count current knr up if it's redundant and/or get an index. Note, we
check nextdf _first_ so that COL1(knr) (ie, CT(knr,1)) is defined. */
while (knr < nextdf && COL1(knr) < 0)
{ knr++; } if (knr == nextdf)
{ return(nalive); }
while (cnt != 0)
{ /* Scan through all relators for this coset. The code here is essentiallythesameasthatinal0_apply.Weinlineforspeed(and
flexibility; the code's not _exactly_ the same). */
for (i = 1; i <= ndrel; i++)
{
j = (mendel ? rellen[i]/relexp[i] : 1); for (k = 0; k < j; k++)
{
/* <-- cancel indent */
/* Setup start & stop positions for scan, and the coset at the current
scan positions. */
beg = &(relators[relind[i]+k]);
end = beg-1 + rellen[i];
ifront = iback = knr;
/* Forward scan, leaving ifront set to coset at left of leftmost hole in
relator or to the last coset in the relator if no hole. */
l = 0; for (fwd = beg; fwd <= end; fwd++)
{ if ((l = CT(ifront, *fwd)) > 0)
{ ifront = l; } else
{ break; }
}
/* If the scan completed, then l = ifront & iback = cos, and we'll fall rightthroughandcheckforacoincidence(i.e.,hasifrontcycledback
to cos or not?). Else, there's a hole & a backward scan is required. */
if (l == 0)
{ for (bwd = end; bwd >= fwd; bwd--)
{
m = *bwd;
mi = invcol[m];
if ((l = CT(iback, mi)) > 0)
{ iback = l; } else/* Scan stalled */
{ if (bwd == fwd)
{ /* The backward scan has only one gap, so note the deduction to
complete the cycle & prime for coincidence check. */
CT(iback, mi) = ifront; if (saved)
{ SAVED(iback, mi); }
if (CT(ifront, m) > 0)
{ ifront = CT(ifront, m); } else
{
CT(ifront, m) = iback;
ifront = iback;
}
INCR(rddedn);
} else/* Need to define a new coset */
{ /* Note that, if m is an involution, and occurs next to itself, thenafterthefirstdefn,theremainderofthestringofm's willclose.Notethatifm^2=1&mis_not_beingtreatedas aninvolution,then`removing'itisaTietzetransformation,not
a free reduction! */
if (nextdf > maxrow) /* Overflow */
{ return(0); }
/* If we get here, the scan has been completed. Check to see if we've foundapairofcoincidentcosets.Recallthat_coinc(ifitdoesnot return>0)isguaranteed_not_tochangeknc/knh,althoughitmayrender
them redundant. */
if (ifront != iback)
{
INCR(rdcoinc); if ((l = al0_coinc(ifront,iback,saved)) > 0)
{ return(l); } if (COL1(knr) < 0)
{ goto do_next; } /* knr now redundant */
}
/* --> restore indent */
}
}
/* All relators close at this coset, any row-filling to do? Only (formally)necessaryifsomeg/Gdoes_not_appearinanyrelator,
but it's usually a good thing to do. */
if (fillr)
{ for (i = 1; i <= ncol; i++)
{ if (CT(knr,i) == 0)
{ if (nextdf > maxrow) /* Overflow */
{ return(0); }
NEXTC(k); /* Make definition */
CT(knr,i) = k;
CT(k,invcol[i]) = knr; if (saved)
{ SAVED(knr,i); }
/* Row knr is fully scanned (or redundant), so we adjust knr up, jumpingoveranyredundancies&checkingtoseeifwe'vefinished.We
have also used up one of our allowed rows, if there's a limit. */
do_next: /* from al0_coinc(): knr redundant */
do
{ knr++; } while (knr < nextdf && COL1(knr) < 0);
staticint al0_cdefn(int cnt)
{ int icol, rcol, irow, ires, k, col, pdqr, pdqc; int first, last, i, ifront, iback, l, m, mi; int *beg, *end, *fwd, *bwd;
Logic fi;
INCR(xcdefn);
while(TRUE)
{ /* Process all outstanding deductions on the stack */
while (topded >= 0)
{
INCR(cddproc);
irow = dedrow[topded];
icol = dedcol[topded--]; if (COL1(irow) < 0)
{
INCR(cdddedn); continue; /* coset has become redundant */
} else
{
ires = CT(irow,icol);
rcol = invcol[icol];
}
fi = TRUE; /* first pass through */
proc_ded: /* entry point for second pass through */
if ((first = edpbeg[icol]) >= 0)
{
last = edpend[icol]; for (i = first; i <= last; i += 2)
{
beg = &(relators[edp[i]]);
end = beg + edp[i+1]-1;
/* <-- cancel indent */
/* We scan this e.d.p. against irow. We don't need to scan the first position,sincewe_know_itmustbeok.Wehavetosetl,incasethe
relator has length precisely one! */
ifront = l = ires;
iback = irow;
/* Forward scan, leaving ifront set to coset at left of leftmost hole in
relator or to the last coset in the relator if no hole. */
/* If the scan completed, ifront = l > 0 & iback = irow, and we'll fall rightthroughandcheckforacoincidence(i.e.,hasifrontcycledback
to irow or not?). Else, there's a hole & a backward scan is required. */
if (l == 0)
{ for (bwd = end; bwd >= fwd; bwd--)
{
m = *bwd;
mi = invcol[m];
if ((l = CT(iback, mi)) > 0)
{ iback = l; } else/* Scan stalled */
{ if (bwd == fwd)
{ /* The backward scan has only one gap, so note the deduction to
complete the cycle. */
CT(iback, mi) = ifront;
CT(ifront, m) = iback;
SAVED(iback, mi);
INCR(cddedn);
} elseif (bwd == fwd + 1) /* gap of length = 1 */
{
INCR(cdgap);
/* In pdefn = 1 or 2 mode make definition immediately, if fill- factorpermits,there'sspace&it'sallowed.Ifnot,do nothing.Notethatwecanhandlethedeductionfromthis definitionatthisstage,ornot(it'llcomeoutinalaterpass throughtheloop),dependingaspdefn=1or2.Ingeneral, thesestrategiesblowoutthecountoftotalcosets,although makingdefinitionsimmediatelyisquickerthanstoringthemon thepdq&makingthemlater,sopdefn=1/2hasahigher `throughput';whetherthiscompensatesforthelargertotcos
figure is moot! */
/* At this stage, if ifront != iback, then either the initial forward scandidnotcyclebacktoirow,orabackwardscanproducedamismatch; ineithercase,wehavefoundacoincidence.Inallothercasesifront=
iback has been enforced, to prevent problems. */
if (iback != ifront)
{ /* We do _not_ return an index at this stage if _coinc() returns a +ve value,sincetheremaystillbedeductionstoprocess(whichmight _decrease_nalive).Wedo,however,detectifthecurrentrowshave becomeredundant.Currently,theonlyfinitevaluereturnedby _coinc()is1,onatotalcollapse.Thisclearsthedednstack,so we'lldropoutofthewhile(topded>=1)loopimmediately&thendrop
out of this function with an index of 1. */
for ( ; knh < nextdf; knh++)
{ if (COL1(knh) >= 0)
{ for (icol = 1; icol <= ncol; icol++)
{ if (CT(knh, icol) == 0)
{ goto hfill; }
}
}
} return(nalive); /* coset table is complete */
/* Try to fill the next hole in the table */
hfill:
if (cnt == 0) /* `normal' termination, since */
{ return(-1); } /* done all requested definitions */ else
{ /* Do we have space to make a definition? If not, return overflow.
If yes, prime the next sequential position & get its row number. */
if (nextdf > maxrow)
{ return(0); } /* unable to make definition */
NEXTC(k); /* ready for definition ... */
/* We try to make a preferred definition, if possible. If we do,
fi is set TRUE. */
if (mode < 0 || mode > 2)
{
result = -512; goto tail_tail;
} if (style < 0 || style > 8 || style == 3 || style == 4)
{
result = -513; goto tail_tail;
}
/* Do the appropriate setup for the requested mode. Note that we _never_ preservepd'sbetweencalls,andthereare_never_outstandingcoincs atacall'sexit(sowedon'tactuallyneedtozerochead/ctail,butwe doanyway!).Wemay,ormaynot,preservedeductionstack,entriesin
the table and the various `progress' counters. */
sgdone = FALSE; /* SG not (successfully) run yet */
rhfree = cdapp = TRUE; /* prime for this new run */
break;
case1: /* continue */
;
break;
case2: /* redo */
topded = -1;
disded = FALSE;
knr = knh = 1;
sgdone = FALSE;
break;
}
/* The static variable rhfree is primed to true at the start of every run (ie,startmode),andretainsitsvalueacrossasequenceofcontinue& redocommandsuntilthenextstart.Anytimewecould_potentially_do anyR-styleapplyingwithoutfillingrows,wetoggleittofalse.This indicatesthatthetable_may_containholes,andthattheal0_upknh() routinemayneedtobecalledbeforeafiniteindex(duetoknr=nextdf) isreturned.Anycodeanywherewhichcouldcauseemptytableslots shouldtakecaretoensurethatrhfreeisfalse.Sincerhfreeisonly invokedwhencheckingafiniteresultduetoknr=nextdf,itsvalueif wegetaresultduetoknh=nextdfisofnoconcern(here,thetableis hole-free,sincethat'swhatknhmeans!).
Insteadoftryingtobeclever,andkeepingaclosewatchonwhatthe valueofthisshouldbeateachpoint,wesimplyresetitatthestartof anycall(s)wheretherfillcontrolparameterisfalse.Thecostof running_upknh()isnomorethanthatofrow-filling(althoughit's concentratedinone`lump'),sincealltablepositionsarecheckedin bothcases.Infact,itwillusuallybeless,sincewecanstartthe checkatknh,weneednotcheckrowsthathavebecomeredundant,andwe makenodefinitions.Notethat,evenifrow-fillingisnotneeded(to obtainafiniteindex),itmaystillbebeneficialtoturniton,since
it may alter the definition sequence. */
if (!rfill)
{ rhfree = FALSE; }
/* Do the appropriate setup for the requested style. Our main concern iswhetherornottostackdefns/dedns(isaveflag)sothatthesecanbe testedagainstalledp,forC-styleenumerations.Wealsohavetotrack whetherornotwehavedonethisoverthecourseofanentirerun;weuse thecdappflagforthis.Thisflagissimilarinconcepttotherhfree one,butismoredifficulttomanage,sinceitis`moreexpensive'toget it`wrong'.Furthermore,saving&applyingdednsisa3-stageprocess, andcdapponlytracksthefirststep.
Notethatinsomestyleswedon'tsavedeductionsinitially,sincewedo aC-styletablelookaheadatthepointwhereweswitchfromR-styleto C-style(whicheffectivelyforcescdapptotrue).(Wecouldalsoinsist that_all_dedns_are_applied,anddoaC-stylelookaheadatanypoint wherewedetect`missed'dedns.)Ofcourse,ifthedednstackislarge enough,thenwe'llneverlosededn's;butwecouldenduphavingto
process _very_ large dedn stacks, which can be expensive. */
/* Combine the style with the mode into the machine's starting state.
Prime machine with `dummy'/`null' action & `success' result. */
state = 1 + 9*mode + style;
action = 0;
result = -1;
/* THE MACHINE ... */
while (TRUE)
{ /* lcount tracks which pass through the machine's loop this is. Then
use result of last action to get next state & action. */
lcount++;
/* DEBUG/TEST/TRACE (DTT) code. Monitors the state machine. */ /* fprintf(fop,"DTT:lcount=%d;state=%daction=%dresult=%d", lcount,state,action,result);
*/
action = al0_act[state][-result];
state = al0_st[state][-result];
/* Warning: DTT code (see above) */ /* fprintf(fop,"-->state=%daction=%d\n",state,action);
*/
switch(action)
{
/* <-- cancel indent */
/* The null action; allows timing tests, progress messages, etc. */
case0:
result = -1; break;
/* Make some R-style definitions. al0_rdefn() can return -1 (`nothing' happened),0(unabletomakedefinition),or>0(finiteresult).Note that_all_finite`index'returnvaluesare`filtered'throughthecheck
phase (action #6), to prevent `problems'. */
case1:
if ((result = al0_rdefn(rfactor, rfill, isave)) > 0)
{ result = -2; }
break;
/* Perform lookahead, in R-style _only_, if enabled. This lookahead is usedwhenwerunoutoftablespace,anditcouldallowustocontinue _without_runningacompaction.However,weelectnottodetectthis stateofaffairsinthecurrentversion.Instead,we'll_always_tryto compact,andwe'llcheckafterdoingthatwhetherornotthere'sany spaceavailableinthetable(howeveritwasobtained!).Notethat lookahead(&anycoincidenceprocessing)does_not_alternextdforknr/ knh(exceptinthecollapseto1case,ofcourse),althoughitmayrender themredundant.Sincethisisa_lookahead_only,thereisneverany needtostackdeductions.Wedon'ttrytotrapaninvalidlaheadvalue. Ifwedon'trecogniseit,wejustquietlydonothing.
/* Perform compaction (any style) if it's allowed & then check whether thetablehasanyspaceleft.Ifso,thencontinue,elsereturn overflow.Notethatcompactiondoes_not_alternalive,butmaychange (reduce)knr/knh/nextdf.Itmakes`free'space_available_,butitdoes
not _create_ it; coincidences (normal, or in lookahead) do that. */
if (nextdf <= maxrow)
{ result = -1; } else
{
result = 0; goto tail_tail;
}
break;
/* Do some C-style definitions / deduction processing. al0_cdefn() can return-1(`nothing'happened),0(unabletomakedefinition),or>0
(finite result - potential index, needs checking). */
case4:
if ((result = al0_cdefn(cfactor)) > 0)
{ result = -2; }
break;
/* Do a C-style complete table lookahead. This is run when we're switchingstylesfromR-toC-style,orwhenwe're`starting'C-style withanalreadyexistingtable.Sincewemaybehaven'tbeingprocessing definitions,weneedtorunthroughtheentiretable.Wetreateach tableentryasadeductionandstackanynewdeductions.Asubsequent C-styledefn/dednpasswillclearthestack,asusual;wecannowenter C-style,andbeconfidentofanyC-styleresult.
Actually,callingthislookaheadisamisnomer.Itmorecorrectlymight bethoughtofaseithera`check'(whenwehaveafiniteresultbut cannotguaranteethatalldefinitionshavebeenprocessed,orwhenwe calltheenumeratorintheredomode)ora`prime'(whenwe'reswitching
to C-style) phase. */
/* We have a finite result; triggered by knr=nextdf, knh=nextdf, or a collapseto1incoincprocessing.Checkthatit'savalidindex;itmay beamultiple,orthetablemayhaveholes.Ifknr=nextdf,thenall relatorscloseagainstallcosets,soweneedonlycheckwhetherornot thetablehasanyholes.Ifknh=nextdf,thenthetableishole-free,so weneedtocheckthatalltableentrieshavebeenscannedinalledp. Notethatwehavetocheckfora`clean'C-styletermination_before_we
may bump knh; this is an artifact of the overloading of knh's meaning. */
case6:
if (knr == nextdf && rhfree)
{ ; } /* ok, fall through */ elseif (knh == nextdf && cdapp && !disded && topded < 0)
{ ; } /* ok, fall through */ elseif (knr == nextdf)
{
al0_upknh(); /* check for holes ... */ if (msgctrl)
{
msgnext = msgincr;
ETINT;
fprintf(fop, "UH: a=%d r=%d h=%d n=%d;", nalive, knr, knh, nextdf);
MSGMID;
fprintf(fop, " m=%d t=%d\n", maxcos, totcos);
BTINT;
} if (knh < nextdf) /* ... table is incomplete */
{
result = -256; goto tail_tail;
}
} elseif (knh == nextdf)
{ /* Apply all remaining cosets. Note that knh=nextdf, so there are no holes&nodefnswill(can!)bemade.Sinceweareonlyinterestedin movingknruptonextdf(perhapsfindingcoincs),weturnmendeloff;
if it's on (& left on), it can cause a dramatic slow-down. */
li = mendel;
mendel = FALSE;
al0_rdefn(-1,FALSE,FALSE);
mendel = li;
/* If start or redo, scan & close the subgroup generators on coset #1. Notethatwecangetcoincidences,orcollapses,oroverflowshere.We treatanoverflowasfatal,andreturnaspecialvalue(-260)toalert thecallertothefactthatthesubgroupgeneratorshavenotbeenfully processed(sowe_must_(re)start,wecan'tcontinue).Notethatknr= knh=1here,andtheyare_not_changed(wedonoscanningagainstthe relators,sotheycan'tgoup,andcoset1isneverredundant).Thusthe onlyfiniteindexwecangetisacollapseto1,andthisisavalid result.
Asthisphase_must_besuccessfullycompletedbeforeacontinueis allowed,anditneednotbethe1stphase(itcanbethe2ndinredo),a time/hole/looplimitcouldcauseanearlyreturn.Sowemakesurethe
sgdone flag is correctly (re)set at all times. */
case7:
if (nsgpg > 0)
{ for (i = 1; i <= nsgpg; i++)
{
pj = &(subggen[subgindex[i]]);
pk = pj-1 + subglength[i];
if ((result = al0_apply(1,pj,pk,TRUE,isave)) >= 0)
{ break; }
}
sgdone = TRUE; if (result == 0)
{
result = -260;
sgdone = FALSE; goto tail_tail;
} elseif (result > 0)
{ result = -2; }
} else
{
result = -1; /* `default' result */
sgdone = TRUE; /* ok, since nothing to do! */
}
break;
/* If start or redo (modes 0/2) and in an appropriate style (ie, 1st step willbeaC-stylescan),andrequested(nrinsgp>0),thenscan&close thefirstnrinsgpgrouprelatorsagainstcoset1.Similarcommentsto thoseforthesubgroupgeneratorsapplyhere,althoughanoverflowdoes
_not_ force a restart here. */
case8:
if (nrinsgp > 0)
{ for (i = 1; i <= nrinsgp; i++)
{
j = (mendel ? rellen[i]/relexp[i] : 1); for (k = 0; k < j; k++)
{
pj = &(relators[relind[i]+k]);
pk = pj-1 + rellen[i];
if ((result = al0_apply(1,pj,pk,TRUE,isave)) >= 0)
{ break; }
}
if (result > 0)
{ result = -2; }
} else
{ result = -1; } /* `default' result */
break;
/* Do some R*-style definitions / deduction processing. al0_rpefn() can return-1(`nothing'happened),0(unabletomakedefinition),or>0 (finiteresult-potentialindex,needschecking).Notetherow-filling argumentandthefactthatwedon'tuse(need?)isave,sincededn stackingismandatoryhere.*/
/* At this point, we have just completed action in state, and are about to`leave'stateviaoneofitsexitpaths(selectedbythe(state, result)pair).Nowisthetimetoperformanyactionspecifictothis point.Notethatthechecksforthevariouslimits(times,holes,...) aredone_after_this,sowe'reguaranteedthatthe(updated)status
will be correct on any `early' exit. */
/* Only calculate % holes if requested, since it's expensive! We only treatthevalueassignificantifwe'veactuallydefinedsomecosets otherthan#1!Weignorethecasewherenalive=1andnotall#1'srow
entries are 0 (ie, some, but not necessarily all, are 1 instead). */
if (hlimit >= 0 && nalive > 1)
{ if (al0_nholes() >= (double)hlimit)
{
result = -257; break;
}
}
/* We have to correctly find the total accumulated time, without disturbinganymessaging(whichmustalwaysprinttheelapsedtime
since the last message). So we _can't_ use the ETINT/BTINT macros. */
if (tlimit >= 0)
{ if ((totaltime + al0_diff(begintime,al0_clock())) >= (double)tlimit)
{
result = -258; break;
}
}
/* Any loop limit in force? */
if (llimit > 0 && lcount >= llimit)
{
result = -259; break;
}
} /* end of "while(TRUE)" */
/* We've either jumped here (finite result, overflow, error), or we've brokenoutthemainloop(time/holes/iterationslimit).Wesimply
update the total time for this call & return the `status'. */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.