259
int sdr_hash_retrieve(Sdr sdrv, Object hash, char *key, Address *value)
264
Address sdr_hash_entry_value(Sdr sdrv, Object hash, Object entry)
273
CHKERR(takeSdr(sdrv->sdr) == 0);
274
keyLength = sdr_table_user_data(sdrv, hash);
275
kvpairLength = sizeof(Address) + keyLength;
276
kvpairAddr = sdr_list_data(sdrv, entry);
277
sdr_read(sdrv, (char *) &kvpair, kvpairAddr, kvpairLength);
278
releaseSdr(sdrv->sdr);
282
int sdr_hash_retrieve(Sdr sdrv, Object hash, char *key, Address *value,
368
int sdr_hash_foreach(Sdr sdrv, Object hash,
369
sdr_hash_callback callback, void *args)
386
//Passing NULL args is OK (passed through to callback)
389
keyLength = sdr_table_user_data(sdrv, hash);
390
kvpairLength = sizeof(Address) + keyLength;
391
sdr_table_dimensions(sdrv, hash, &rowSize, &rowCount);
393
/* Iterate over each row/bucket, loading the sdrlist of members of each. */
394
for (rowNbr = 0; rowNbr < rowCount; rowNbr++)
396
rowAddr = sdr_table_row(sdrv, hash, rowNbr);
397
sdr_read(sdrv, (char *) &listAddr, rowAddr, sizeof(Object));
399
/* Iterate over each member of this bucket. */
400
for (elt = sdr_list_first(sdrv, listAddr); elt;
401
elt = sdr_list_next(sdrv, elt))
403
kvpairAddr = sdr_list_data(sdrv, elt);
404
sdr_read(sdrv, (char *) &kvpair, kvpairAddr, kvpairLength);
406
/* Call the callback passed to us with the key, value pair. */
407
callback(sdrv, hash, kvpair.key, kvpair.value, args);
333
415
int Sdr_hash_revise(char *file, int line, Sdr sdrv, Object hash, char *key,