hasht.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * hasht.c
  4.  *   hash table related functions that are not directly supported
  5.  *   by the hashing packages under utils/hash.
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  *
  10.  * IDENTIFICATION
  11.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/lib/hasht.c,v 1.8 1999/02/13 23:15:35 momjian Exp $
  12.  *
  13.  *-------------------------------------------------------------------------
  14.  */
  15. #include <postgres.h>
  16. #include <utils/memutils.h>
  17. #include <utils/hsearch.h>
  18. #include <lib/hasht.h>
  19. /* -----------------------------------
  20.  * HashTableWalk
  21.  *
  22.  * call function on every element in hashtable
  23.  * one extra argument, arg may be supplied
  24.  * -----------------------------------
  25.  */
  26. void
  27. HashTableWalk(HTAB *hashtable, HashtFunc function, int arg)
  28. {
  29. long    *hashent;
  30. long    *data;
  31. int keysize;
  32. keysize = hashtable->hctl->keysize;
  33. hash_seq((HTAB *) NULL);
  34. while ((hashent = hash_seq(hashtable)) != (long *) TRUE)
  35. {
  36. if (hashent == NULL)
  37. elog(FATAL, "error in HashTableWalk.");
  38. /*
  39.  * XXX the corresponding hash table insertion does NOT LONGALIGN
  40.  * -- make sure the keysize is ok
  41.  */
  42. data = (long *) LONGALIGN((char *) hashent + keysize);
  43. (*function) (data, arg);
  44. }
  45. }