/ Hex Artifact Content
Login

Artifact 8890a25af81fb85a9ad7790d32eedab4b994da22:


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 69 6e 74 20 6e 4b 65 79 3b 20 20 2f  ey; int nKey;  /
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 69 6e 74 20 6e 4b 65 79 2c 20 76  Key, int nKey, v
0ad0: 6f 69 64 20 2a 70 44 61 74 61 29 3b 0a 76 6f 69  oid *pData);.voi
0ae0: 64 20 2a 73 71 6c 69 74 65 33 48 61 73 68 46 69  d *sqlite3HashFi
0af0: 6e 64 28 63 6f 6e 73 74 20 48 61 73 68 2a 2c 20  nd(const Hash*, 
0b00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 4b 65 79  const char *pKey
0b10: 2c 20 69 6e 74 20 6e 4b 65 79 29 3b 0a 76 6f 69  , int nKey);.voi
0b20: 64 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65  d sqlite3HashCle
0b30: 61 72 28 48 61 73 68 2a 29 3b 0a 0a 2f 2a 0a 2a  ar(Hash*);../*.*
0b40: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 6c 6f 6f  * Macros for loo
0b50: 70 69 6e 67 20 6f 76 65 72 20 61 6c 6c 20 65 6c  ping over all el
0b60: 65 6d 65 6e 74 73 20 6f 66 20 61 20 68 61 73 68  ements of a hash
0b70: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 69 64 69   table.  The idi
0b80: 6f 6d 20 69 73 0a 2a 2a 20 6c 69 6b 65 20 74 68  om is.** like th
0b90: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 48 61 73 68  is:.**.**   Hash
0ba0: 20 68 3b 0a 2a 2a 20 20 20 48 61 73 68 45 6c 65   h;.**   HashEle
0bb0: 6d 20 2a 70 3b 0a 2a 2a 20 20 20 2e 2e 2e 0a 2a  m *p;.**   ....*
0bc0: 2a 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65  *   for(p=sqlite
0bd0: 48 61 73 68 46 69 72 73 74 28 26 68 29 3b 20 70  HashFirst(&h); p
0be0: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
0bf0: 78 74 28 70 29 29 7b 0a 2a 2a 20 20 20 20 20 53  xt(p)){.**     S
0c00: 6f 6d 65 53 74 72 75 63 74 75 72 65 20 2a 70 44  omeStructure *pD
0c10: 61 74 61 20 3d 20 73 71 6c 69 74 65 48 61 73 68  ata = sqliteHash
0c20: 44 61 74 61 28 70 29 3b 0a 2a 2a 20 20 20 20 20  Data(p);.**     
0c30: 2f 2f 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20  // do something 
0c40: 77 69 74 68 20 70 44 61 74 61 0a 2a 2a 20 20 20  with pData.**   
0c50: 7d 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c  }.*/.#define sql
0c60: 69 74 65 48 61 73 68 46 69 72 73 74 28 48 29 20  iteHashFirst(H) 
0c70: 20 28 28 48 29 2d 3e 66 69 72 73 74 29 0a 23 64   ((H)->first).#d
0c80: 65 66 69 6e 65 20 73 71 6c 69 74 65 48 61 73 68  efine sqliteHash
0c90: 4e 65 78 74 28 45 29 20 20 20 28 28 45 29 2d 3e  Next(E)   ((E)->
0ca0: 6e 65 78 74 29 0a 23 64 65 66 69 6e 65 20 73 71  next).#define sq
0cb0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 45 29 20  liteHashData(E) 
0cc0: 20 20 28 28 45 29 2d 3e 64 61 74 61 29 0a 2f 2a    ((E)->data)./*
0cd0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 48   #define sqliteH
0ce0: 61 73 68 4b 65 79 28 45 29 20 20 20 20 28 28 45  ashKey(E)    ((E
0cf0: 29 2d 3e 70 4b 65 79 29 20 2f 2f 20 4e 4f 54 20  )->pKey) // NOT 
0d00: 55 53 45 44 20 2a 2f 0a 2f 2a 20 23 64 65 66 69  USED */./* #defi
0d10: 6e 65 20 73 71 6c 69 74 65 48 61 73 68 4b 65 79  ne sqliteHashKey
0d20: 73 69 7a 65 28 45 29 20 28 28 45 29 2d 3e 6e 4b  size(E) ((E)->nK
0d30: 65 79 29 20 20 2f 2f 20 4e 4f 54 20 55 53 45 44  ey)  // NOT USED
0d40: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65   */../*.** Numbe
0d50: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
0d60: 61 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2f 0a  a hash table.*/.
0d70: 2f 2a 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  /* #define sqlit
0d80: 65 48 61 73 68 43 6f 75 6e 74 28 48 29 20 20 28  eHashCount(H)  (
0d90: 28 48 29 2d 3e 63 6f 75 6e 74 29 20 2f 2f 20 4e  (H)->count) // N
0da0: 4f 54 20 55 53 45 44 20 2a 2f 0a 0a 23 65 6e 64  OT USED */..#end
0db0: 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 5f 48 41  if /* _SQLITE_HA
0dc0: 53 48 5f 48 5f 20 2a 2f 0a                       SH_H_ */.