more fixes for global data-structures.

statistics on atom space.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1690 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2006-09-01 20:14:42 +00:00
parent cd5bc14cfc
commit f0b132b083
6 changed files with 272 additions and 253 deletions

View File

@@ -1347,22 +1347,23 @@ static Int TermHash(Term t1, Int depth_lim, Int k)
Int i;
if (IsVarTerm(t1)) {
return(-1);
} else if (IsAtomTerm(t1)) {
register char *s = AtomName(AtomOfTerm(t1));
for (i=0; s[i]; i++)
} else if (IsAtomOrIntTerm(t1)) {
if (IsAtomTerm(t1)) {
register char *s = AtomName(AtomOfTerm(t1));
for (i=0; s[i]; i++)
HASHADD(s[i]);
return(k);
return k;
} else {
HASHADD(IntOfTerm(t1));
return k;
}
} else if (IsPairTerm(t1)) {
HASHADD('.');
depth_lim--;
if (depth_lim == 0) return(TRUE);
k = TermHash(HeadOfTerm(t1),depth_lim,k);
if (k < 0) return(-1);
k = TermHash(TailOfTerm(t1),depth_lim,k);
return(k);
} else if (IsIntTerm(t1)) {
HASHADD(IntOfTerm(t1));
return(k);
if (k < 0) return k;
return TermHash(TailOfTerm(t1),depth_lim,k);
} else {
Functor f = FunctorOfTerm(t1);
@@ -1386,17 +1387,18 @@ static Int TermHash(Term t1, Int depth_lim, Int k)
return(-1);
}
} else {
int ar = ArityOfFunctor(FunctorOfTerm(t1));
int res = TRUE;
register char *s = AtomName(NameOfFunctor(f));
int ar;
char *s;
depth_lim--;
if (depth_lim == 0) return(TRUE);
s = AtomName(NameOfFunctor(f));
for (i=0; s[i]; i++)
HASHADD(s[i]);
for (i=1; i<=ar && res; i++) {
depth_lim--;
if (depth_lim == 0) return k;
ar = ArityOfFunctor(f);
for (i=1; i<=ar; i++) {
k = TermHash(ArgOfTerm(i,t1),depth_lim,k);
if (k == -1 ) return(-1);
if (k < 0) return k;
}
return(k);
}