|
|
researchv10 Norman
# include "stdio.h"
# include "assert.h"
whash(ft, fa, fb, nhash, iflong, ptotct, phused)
FILE *fa, *fb, *ft;
int nhash, *phused;
long *ptotct;
{
char line[100];
int hash = 0, hused = 0;
long totct = 0L;
int ct = 0;
long point;
long opoint = -1;
int m;
int k; long lp;
long *hpt;
int *hfreq = NULL;
hpt = (long *) calloc (nhash+1, sizeof(*hpt));
assert (hpt != NULL);
hfreq = (int *) calloc (nhash, sizeof(*hfreq));
assert (hfreq !=NULL);
hpt[0] = 0;
lp= 0;
while (fgets(line, 100, ft))
{
totct++;
sscanf(line, "%d %ld", &k, &point);
if (hash < k)
{
hused++;
if (iflong) putl(-1L, fb); else putw(-1, fb);
hfreq[hash]=ct;
while (hash<k)
{
hpt[++hash] = lp;
hfreq[hash] = 0;
}
hpt[hash] = lp += iflong? sizeof(long) : sizeof(int);
opoint= -1;
ct=0;
}
if (point!=opoint)
{
if (iflong)
putl(opoint=point, fb);
else
putw( (int)(opoint=point), fb);
lp += iflong? sizeof(long) : sizeof(int);
ct++;
}
}
if (iflong) putl(-1L, fb); else putw(-1,fb);
while (hash<nhash)
hpt[++hash]=lp;
fwrite(&nhash, sizeof(nhash), 1, fa);
fwrite(&iflong, sizeof(iflong), 1, fa);
fwrite(hpt, sizeof(*hpt), nhash, fa);
fwrite (hfreq, sizeof(*hfreq), nhash, fa);
*ptotct = totct;
*phused = hused;
}
putl(ll, f)
long ll;
FILE *f;
{
int *x;
if (sizeof(long) == sizeof(int))
{
putw(ll, f);
return;
}
x = ≪
putw(x[0], f);
putw(x[1], f);
}
long getl(f)
FILE *f;
{
int x[2];
int *ll;
x[0] = getw(f);
x[1] = getw(f);
ll = x;
return (*ll);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.