/ Hex Artifact Content
Login

Artifact c8f3c31722cf3277d03713909761e152a5b81094:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 32 32 0a 2a 2a 0a 2a 2a 20 54 68  mber 22.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ******.** This i
0180: 73 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  s the header fil
0190: 65 20 66 6f 72 20 74 68 65 20 67 65 6e 65 72 69  e for the generi
01a0: 63 20 68 61 73 68 2d 74 61 62 6c 65 20 69 6d 70  c hash-table imp
01b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 75  lementation.** u
01c0: 73 65 64 20 69 6e 20 53 51 4c 69 74 65 2e 0a 2a  sed in SQLite..*
01d0: 2f 0a 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54  /.#ifndef _SQLIT
01e0: 45 5f 48 41 53 48 5f 48 5f 0a 23 64 65 66 69 6e  E_HASH_H_.#defin
01f0: 65 20 5f 53 51 4c 49 54 45 5f 48 41 53 48 5f 48  e _SQLITE_HASH_H
0200: 5f 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  _../* Forward de
0210: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 66 20 73 74  clarations of st
0220: 72 75 63 74 75 72 65 73 2e 20 2a 2f 0a 74 79 70  ructures. */.typ
0230: 65 64 65 66 20 73 74 72 75 63 74 20 48 61 73 68  edef struct Hash
0240: 20 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73   Hash;.typedef s
0250: 74 72 75 63 74 20 48 61 73 68 45 6c 65 6d 20 48  truct HashElem H
0260: 61 73 68 45 6c 65 6d 3b 0a 0a 2f 2a 20 41 20 63  ashElem;../* A c
0270: 6f 6d 70 6c 65 74 65 20 68 61 73 68 20 74 61 62  omplete hash tab
0280: 6c 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  le is an instanc
0290: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
02a0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
02b0: 20 54 68 65 20 69 6e 74 65 72 6e 61 6c 73 20 6f   The internals o
02c0: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
02d0: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
02e0: 20 62 65 20 6f 70 61 71 75 65 20 2d 2d 20 63 6c   be opaque -- cl
02f0: 69 65 6e 74 0a 2a 2a 20 63 6f 64 65 20 73 68 6f  ient.** code sho
0300: 75 6c 64 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  uld not attempt 
0310: 74 6f 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64  to access or mod
0320: 69 66 79 20 74 68 65 20 66 69 65 6c 64 73 20 6f  ify the fields o
0330: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
0340: 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2e 20 20 43  .** directly.  C
0350: 68 61 6e 67 65 20 74 68 69 73 20 73 74 72 75 63  hange this struc
0360: 74 75 72 65 20 6f 6e 6c 79 20 62 79 20 75 73 69  ture only by usi
0370: 6e 67 20 74 68 65 20 72 6f 75 74 69 6e 65 73 20  ng the routines 
0380: 62 65 6c 6f 77 2e 0a 2a 2a 20 48 6f 77 65 76 65  below..** Howeve
0390: 72 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 22  r, some of the "
03a0: 70 72 6f 63 65 64 75 72 65 73 22 20 61 6e 64 20  procedures" and 
03b0: 22 66 75 6e 63 74 69 6f 6e 73 22 20 66 6f 72 20  "functions" for 
03c0: 6d 6f 64 69 66 79 69 6e 67 20 61 6e 64 0a 2a 2a  modifying and.**
03d0: 20 61 63 63 65 73 73 69 6e 67 20 74 68 69 73 20   accessing this 
03e0: 73 74 72 75 63 74 75 72 65 20 61 72 65 20 72 65  structure are re
03f0: 61 6c 6c 79 20 6d 61 63 72 6f 73 2c 20 73 6f 20  ally macros, so 
0400: 77 65 20 63 61 6e 27 74 20 72 65 61 6c 6c 79 20  we can't really 
0410: 6d 61 6b 65 0a 2a 2a 20 74 68 69 73 20 73 74 72  make.** this str
0420: 75 63 74 75 72 65 20 6f 70 61 71 75 65 2e 0a 2a  ucture opaque..*
0430: 2a 0a 2a 2a 20 41 6c 6c 20 65 6c 65 6d 65 6e 74  *.** All element
0440: 73 20 6f 66 20 74 68 65 20 68 61 73 68 20 74 61  s of the hash ta
0450: 62 6c 65 20 61 72 65 20 6f 6e 20 61 20 73 69 6e  ble are on a sin
0460: 67 6c 65 20 64 6f 75 62 6c 79 2d 6c 69 6e 6b 65  gle doubly-linke
0470: 64 20 6c 69 73 74 2e 0a 2a 2a 20 48 61 73 68 2e  d list..** Hash.
0480: 66 69 72 73 74 20 70 6f 69 6e 74 73 20 74 6f 20  first points to 
0490: 74 68 65 20 68 65 61 64 20 6f 66 20 74 68 69 73  the head of this
04a0: 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   list..**.** The
04b0: 72 65 20 61 72 65 20 48 61 73 68 2e 68 74 73 69  re are Hash.htsi
04c0: 7a 65 20 62 75 63 6b 65 74 73 2e 20 20 45 61 63  ze buckets.  Eac
04d0: 68 20 62 75 63 6b 65 74 20 70 6f 69 6e 74 73 20  h bucket points 
04e0: 74 6f 20 61 20 73 70 6f 74 20 69 6e 0a 2a 2a 20  to a spot in.** 
04f0: 74 68 65 20 67 6c 6f 62 61 6c 20 64 6f 75 62 6c  the global doubl
0500: 79 2d 6c 69 6e 6b 65 64 20 6c 69 73 74 2e 20 20  y-linked list.  
0510: 54 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  The contents of 
0520: 74 68 65 20 62 75 63 6b 65 74 20 61 72 65 20 74  the bucket are t
0530: 68 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 20 70 6f  he.** element po
0540: 69 6e 74 65 64 20 74 6f 20 70 6c 75 73 20 74 68  inted to plus th
0550: 65 20 6e 65 78 74 20 5f 68 74 2e 63 6f 75 6e 74  e next _ht.count
0560: 2d 31 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  -1 elements in t
0570: 68 65 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 48  he list..**.** H
0580: 61 73 68 2e 68 74 73 69 7a 65 20 61 6e 64 20 48  ash.htsize and H
0590: 61 73 68 2e 68 74 20 6d 61 79 20 62 65 20 7a 65  ash.ht may be ze
05a0: 72 6f 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  ro.  In that cas
05b0: 65 20 6c 6f 6f 6b 75 70 20 69 73 20 64 6f 6e 65  e lookup is done
05c0: 0a 2a 2a 20 62 79 20 61 20 6c 69 6e 65 61 72 20  .** by a linear 
05d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 67 6c  search of the gl
05e0: 6f 62 61 6c 20 6c 69 73 74 2e 20 20 46 6f 72 20  obal list.  For 
05f0: 73 6d 61 6c 6c 20 74 61 62 6c 65 73 2c 20 74 68  small tables, th
0600: 65 20 0a 2a 2a 20 48 61 73 68 2e 68 74 20 74 61  e .** Hash.ht ta
0610: 62 6c 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c  ble is never all
0620: 6f 63 61 74 65 64 20 62 65 63 61 75 73 65 20 69  ocated because i
0630: 66 20 74 68 65 72 65 20 61 72 65 20 66 65 77 20  f there are few 
0640: 65 6c 65 6d 65 6e 74 73 0a 2a 2a 20 69 6e 20 74  elements.** in t
0650: 68 65 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20  he table, it is 
0660: 66 61 73 74 65 72 20 74 6f 20 64 6f 20 61 20 6c  faster to do a l
0670: 69 6e 65 61 72 20 73 65 61 72 63 68 20 74 68 61  inear search tha
0680: 6e 20 74 6f 20 6d 61 6e 61 67 65 0a 2a 2a 20 74  n to manage.** t
0690: 68 65 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  he hash table..*
06a0: 2f 0a 73 74 72 75 63 74 20 48 61 73 68 20 7b 0a  /.struct Hash {.
06b0: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 68    unsigned int h
06c0: 74 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  tsize;      /* N
06d0: 75 6d 62 65 72 20 6f 66 20 62 75 63 6b 65 74 73  umber of buckets
06e0: 20 69 6e 20 74 68 65 20 68 61 73 68 20 74 61 62   in the hash tab
06f0: 6c 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  le */.  unsigned
0700: 20 69 6e 74 20 63 6f 75 6e 74 3b 20 20 20 20 20   int count;     
0710: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
0720: 6e 74 72 69 65 73 20 69 6e 20 74 68 69 73 20 74  ntries in this t
0730: 61 62 6c 65 20 2a 2f 0a 20 20 48 61 73 68 45 6c  able */.  HashEl
0740: 65 6d 20 2a 66 69 72 73 74 3b 20 20 20 20 20 20  em *first;      
0750: 20 20 20 20 2f 2a 20 54 68 65 20 66 69 72 73 74      /* The first
0760: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
0770: 61 72 72 61 79 20 2a 2f 0a 20 20 73 74 72 75 63  array */.  struc
0780: 74 20 5f 68 74 20 7b 20 20 20 20 20 20 20 20 20  t _ht {         
0790: 20 20 20 20 20 2f 2a 20 74 68 65 20 68 61 73 68       /* the hash
07a0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
07b0: 74 20 63 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  t count;        
07c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
07d0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 77 69  er of entries wi
07e0: 74 68 20 74 68 69 73 20 68 61 73 68 20 2a 2f 0a  th this hash */.
07f0: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 63 68      HashElem *ch
0800: 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ain;           /
0810: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
0820: 73 74 20 65 6e 74 72 79 20 77 69 74 68 20 74 68  st entry with th
0830: 69 73 20 68 61 73 68 20 2a 2f 0a 20 20 7d 20 2a  is hash */.  } *
0840: 68 74 3b 0a 7d 3b 0a 0a 2f 2a 20 45 61 63 68 20  ht;.};../* Each 
0850: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 68  element in the h
0860: 61 73 68 20 74 61 62 6c 65 20 69 73 20 61 6e 20  ash table is an 
0870: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
0880: 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 73 74  following .** st
0890: 72 75 63 74 75 72 65 2e 20 20 41 6c 6c 20 65 6c  ructure.  All el
08a0: 65 6d 65 6e 74 73 20 61 72 65 20 73 74 6f 72 65  ements are store
08b0: 64 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 64 6f  d on a single do
08c0: 75 62 6c 79 2d 6c 69 6e 6b 65 64 20 6c 69 73 74  ubly-linked list
08d0: 2e 0a 2a 2a 0a 2a 2a 20 41 67 61 69 6e 2c 20 74  ..**.** Again, t
08e0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
08f0: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
0900: 6f 70 61 71 75 65 2c 20 62 75 74 20 69 74 20 63  opaque, but it c
0910: 61 6e 27 74 20 72 65 61 6c 6c 79 0a 2a 2a 20 62  an't really.** b
0920: 65 20 6f 70 61 71 75 65 20 62 65 63 61 75 73 65  e opaque because
0930: 20 69 74 20 69 73 20 75 73 65 64 20 62 79 20 6d   it is used by m
0940: 61 63 72 6f 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  acros..*/.struct
0950: 20 48 61 73 68 45 6c 65 6d 20 7b 0a 20 20 48 61   HashElem {.  Ha
0960: 73 68 45 6c 65 6d 20 2a 6e 65 78 74 2c 20 2a 70  shElem *next, *p
0970: 72 65 76 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65  rev;       /* Ne
0980: 78 74 20 61 6e 64 20 70 72 65 76 69 6f 75 73 20  xt and previous 
0990: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
09a0: 74 61 62 6c 65 20 2a 2f 0a 20 20 76 6f 69 64 20  table */.  void 
09b0: 2a 64 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  *data;          
09c0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
09d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
09e0: 74 68 69 73 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a  this element */.
09f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 4b    const char *pK
0a00: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ey;            /
0a10: 2a 20 4b 65 79 20 61 73 73 6f 63 69 61 74 65 64  * Key associated
0a20: 20 77 69 74 68 20 74 68 69 73 20 65 6c 65 6d 65   with this eleme
0a30: 6e 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  nt */.};../*.** 
0a40: 41 63 63 65 73 73 20 72 6f 75 74 69 6e 65 73 2e  Access routines.
0a50: 20 20 54 6f 20 64 65 6c 65 74 65 2c 20 69 6e 73    To delete, ins
0a60: 65 72 74 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74  ert a NULL point
0a70: 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  er..*/.void sqli
0a80: 74 65 33 48 61 73 68 49 6e 69 74 28 48 61 73 68  te3HashInit(Hash
0a90: 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
0aa0: 33 48 61 73 68 49 6e 73 65 72 74 28 48 61 73 68  3HashInsert(Hash
0ab0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  *, const char *p
0ac0: 4b 65 79 2c 20 76 6f 69 64 20 2a 70 44 61 74 61  Key, void *pData
0ad0: 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
0ae0: 48 61 73 68 46 69 6e 64 28 63 6f 6e 73 74 20 48  HashFind(const H
0af0: 61 73 68 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ash*, const char
0b00: 20 2a 70 4b 65 79 29 3b 0a 76 6f 69 64 20 73 71   *pKey);.void sq
0b10: 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 48  lite3HashClear(H
0b20: 61 73 68 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ash*);../*.** Ma
0b30: 63 72 6f 73 20 66 6f 72 20 6c 6f 6f 70 69 6e 67  cros for looping
0b40: 20 6f 76 65 72 20 61 6c 6c 20 65 6c 65 6d 65 6e   over all elemen
0b50: 74 73 20 6f 66 20 61 20 68 61 73 68 20 74 61 62  ts of a hash tab
0b60: 6c 65 2e 20 20 54 68 65 20 69 64 69 6f 6d 20 69  le.  The idiom i
0b70: 73 0a 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a  s.** like this:.
0b80: 2a 2a 0a 2a 2a 20 20 20 48 61 73 68 20 68 3b 0a  **.**   Hash h;.
0b90: 2a 2a 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  **   HashElem *p
0ba0: 3b 0a 2a 2a 20 20 20 2e 2e 2e 0a 2a 2a 20 20 20  ;.**   ....**   
0bb0: 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68  for(p=sqliteHash
0bc0: 46 69 72 73 74 28 26 68 29 3b 20 70 3b 20 70 3d  First(&h); p; p=
0bd0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70  sqliteHashNext(p
0be0: 29 29 7b 0a 2a 2a 20 20 20 20 20 53 6f 6d 65 53  )){.**     SomeS
0bf0: 74 72 75 63 74 75 72 65 20 2a 70 44 61 74 61 20  tructure *pData 
0c00: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
0c10: 28 70 29 3b 0a 2a 2a 20 20 20 20 20 2f 2f 20 64  (p);.**     // d
0c20: 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68  o something with
0c30: 20 70 44 61 74 61 0a 2a 2a 20 20 20 7d 0a 2a 2f   pData.**   }.*/
0c40: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 48  .#define sqliteH
0c50: 61 73 68 46 69 72 73 74 28 48 29 20 20 28 28 48  ashFirst(H)  ((H
0c60: 29 2d 3e 66 69 72 73 74 29 0a 23 64 65 66 69 6e  )->first).#defin
0c70: 65 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  e sqliteHashNext
0c80: 28 45 29 20 20 20 28 28 45 29 2d 3e 6e 65 78 74  (E)   ((E)->next
0c90: 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
0ca0: 48 61 73 68 44 61 74 61 28 45 29 20 20 20 28 28  HashData(E)   ((
0cb0: 45 29 2d 3e 64 61 74 61 29 0a 2f 2a 20 23 64 65  E)->data)./* #de
0cc0: 66 69 6e 65 20 73 71 6c 69 74 65 48 61 73 68 4b  fine sqliteHashK
0cd0: 65 79 28 45 29 20 20 20 20 28 28 45 29 2d 3e 70  ey(E)    ((E)->p
0ce0: 4b 65 79 29 20 2f 2f 20 4e 4f 54 20 55 53 45 44  Key) // NOT USED
0cf0: 20 2a 2f 0a 2f 2a 20 23 64 65 66 69 6e 65 20 73   */./* #define s
0d00: 71 6c 69 74 65 48 61 73 68 4b 65 79 73 69 7a 65  qliteHashKeysize
0d10: 28 45 29 20 28 28 45 29 2d 3e 6e 4b 65 79 29 20  (E) ((E)->nKey) 
0d20: 20 2f 2f 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a   // NOT USED */.
0d30: 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66  ./*.** Number of
0d40: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 20 68 61   entries in a ha
0d50: 73 68 20 74 61 62 6c 65 0a 2a 2f 0a 2f 2a 20 23  sh table.*/./* #
0d60: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 48 61 73  define sqliteHas
0d70: 68 43 6f 75 6e 74 28 48 29 20 20 28 28 48 29 2d  hCount(H)  ((H)-
0d80: 3e 63 6f 75 6e 74 29 20 2f 2f 20 4e 4f 54 20 55  >count) // NOT U
0d90: 53 45 44 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  SED */..#endif /
0da0: 2a 20 5f 53 51 4c 49 54 45 5f 48 41 53 48 5f 48  * _SQLITE_HASH_H
0db0: 5f 20 2a 2f 0a                                   _ */.