mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Further cleanup of dynahash.c API, in pursuit of portability and
readability. Bizarre '(long *) TRUE' return convention is gone, in favor of just raising an error internally in dynahash.c when we detect hashtable corruption. HashTableWalk is gone, in favor of using hash_seq_search directly, since it had no hope of working with non-LONGALIGNable datatypes. Simplify some other code that was made undesirably grotty by promixity to HashTableWalk.
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
# Makefile for lib (miscellaneous stuff)
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/lib/Makefile,v 1.15 2000/08/31 16:09:59 petere Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/lib/Makefile,v 1.16 2001/10/05 17:28:12 tgl Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@ -12,7 +12,7 @@ subdir = src/backend/lib
|
||||
top_builddir = ../../..
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
|
||||
OBJS = bit.o hasht.o lispsort.o stringinfo.o dllist.o
|
||||
OBJS = bit.o dllist.o lispsort.o stringinfo.o
|
||||
|
||||
all: SUBSYS.o
|
||||
|
||||
|
@ -1,58 +0,0 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* hasht.c
|
||||
* hash table related functions that are not directly supported
|
||||
* by the hashing packages under utils/hash.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/lib/Attic/hasht.c,v 1.15 2001/01/24 19:42:55 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "lib/hasht.h"
|
||||
#include "utils/memutils.h"
|
||||
|
||||
/* -----------------------------------
|
||||
* HashTableWalk
|
||||
*
|
||||
* call given function on every element in hashtable
|
||||
*
|
||||
* one extra argument (arg) may be supplied
|
||||
*
|
||||
* NOTE: it is allowed for the given function to delete the hashtable entry
|
||||
* it is passed. However, deleting any other element while the scan is
|
||||
* in progress is UNDEFINED (see hash_seq functions). Also, if elements are
|
||||
* added to the table while the scan is in progress, it is unspecified
|
||||
* whether they will be visited by the scan or not.
|
||||
* -----------------------------------
|
||||
*/
|
||||
void
|
||||
HashTableWalk(HTAB *hashtable, HashtFunc function, Datum arg)
|
||||
{
|
||||
HASH_SEQ_STATUS status;
|
||||
long *hashent;
|
||||
void *data;
|
||||
int keysize;
|
||||
|
||||
hash_seq_init(&status, hashtable);
|
||||
keysize = hashtable->hctl->keysize;
|
||||
|
||||
while ((hashent = hash_seq_search(&status)) != (long *) TRUE)
|
||||
{
|
||||
if (hashent == NULL)
|
||||
elog(FATAL, "error in HashTableWalk");
|
||||
|
||||
/*
|
||||
* XXX the corresponding hash table insertion does NOT LONGALIGN
|
||||
* -- make sure the keysize is ok
|
||||
*/
|
||||
data = (void *) LONGALIGN((char *) hashent + keysize);
|
||||
(*function) (data, arg);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user