96 { fprintf(stderr,
"\nError in function setupBucket\n"
97 " offset must be >= 0\n");
101 bucket =
newBucket(maxbin, maxitem, offset);
103 for (i = 0; i <= maxbin; i++)
105 for (u = 0; u <= maxitem; u++)
106 { bucket->
next[u] = bucket->
last[u] = -1;
118{
PORD_INT *bin, *next, *key, maxbin, minbin, nobj;
132 while (bin[minbin] == -1) minbin++;
134 bestitem = bin[minbin];
141 if ((minbin == 0) || (minbin == maxbin))
142 { item = next[bestitem];
144 {
if (key[item] < bestkey)
170 { fprintf(stderr,
"\nError in function insertBucket\n"
171 " key %d too large/small for bucket\n", k);
175 { fprintf(stderr,
"\nError in function insertBucket\n"
176 " item %d too large for bucket (maxitem is %d)\n", item,
181 { fprintf(stderr,
"\nError in function insertBucket\n"
182 " item %d already in bucket\n", item);
197 bucket->
key[item] = k;
202 nextitem = bucket->
bin[s];
204 bucket->
last[nextitem] = item;
205 bucket->
next[item] = nextitem;
206 bucket->
last[item] = -1;
207 bucket->
bin[s] = item;
221 { fprintf(stderr,
"\nError in function removeBucket\n"
222 " item %d is not in bucket\n", item);
229 nextitem = bucket->
next[item];
230 lastitem = bucket->
last[item];
232 bucket->
last[nextitem] = lastitem;
234 bucket->
next[lastitem] = nextitem;
238 bucket->
bin[s] = nextitem;
void insertBucket(bucket_t *bucket, PORD_INT k, PORD_INT item)
bucket_t * setupBucket(PORD_INT maxbin, PORD_INT maxitem, PORD_INT offset)
void freeBucket(bucket_t *bucket)
PORD_INT minBucket(bucket_t *bucket)
void removeBucket(bucket_t *bucket, PORD_INT item)
bucket_t * newBucket(PORD_INT maxbin, PORD_INT maxitem, PORD_INT offset)
#define mymalloc(ptr, nr, type)