Hex Artifact Content Вы: nobody
Вход

Artifact 54aa4595212519ce25297c55019720c2fdaf4bf9:


0000: 2f 2a 0d 0a 6e 6f 63 61 73 65 6d 61 70 2e 68 70  /*..nocasemap.hp
0010: 70 0d 0a 28 63 29 20 c0 eb e5 ea f1 e0 ed e4 f0  p..(c) .........
0020: 20 ce f0 e5 f4 ea ee e2 0d 0a d8 e0 e1 eb ee ed   ...............
0030: 20 f5 e5 f8 2d f2 e0 e1 eb e8 f6 fb 20 e4 eb ff   ...-....... ...
0040: 20 f1 f2 f0 ee ea ee e2 fb f5 20 ea eb fe f7 e5   ......... .....
0050: e9 20 e1 e5 e7 20 f3 f7 e5 f2 e0 20 f0 e5 e3 e8  . ... ..... ....
0060: f1 f2 f0 e0 0d 0a 2a 2f 0d 0a 0d 0a 23 70 72 61  ......*/....#pra
0070: 67 6d 61 20 6f 6e 63 65 0d 0a 23 70 72 61 67 6d  gma once..#pragm
0080: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0090: 65 3a 20 34 37 38 36 29 09 2f 2f 20 cf f0 e5 e4  e: 4786).// ....
00a0: f3 ef f0 e5 e6 e4 e5 ed e8 ff 20 ee 20 e4 eb e8  .......... . ...
00b0: ed ed fb f5 20 e8 ec e5 ed e0 f5 0d 0a 0d 0a 6e  .... ..........n
00c0: 61 6d 65 73 70 61 63 65 20 6e 63 6d 5f 73 79 6d  amespace ncm_sym
00d0: 62 7b 0d 0a 5f 5f 66 6f 72 63 65 69 6e 6c 69 6e  b{..__forceinlin
00e0: 65 20 44 57 4f 52 44 20 73 79 6d 62 6f 6c 28 4c  e DWORD symbol(L
00f0: 50 43 53 54 52 20 70 74 72 29 7b 72 65 74 75 72  PCSTR ptr){retur
0100: 6e 20 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57  n static_cast<DW
0110: 4f 52 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74  ORD>(static_cast
0120: 3c 42 59 54 45 3e 28 2a 70 74 72 29 29 3b 7d 0d  <BYTE>(*ptr));}.
0130: 0a 7d 0d 0a 0d 0a 2f 2f 20 c1 e0 e7 ee e2 fb e9  .}....// .......
0140: 20 ea eb e0 f1 f1 2c 20 f0 e5 e0 eb e8 e7 f3 fe   ....., ........
0150: f9 e8 e9 20 ee e1 f9 f3 fe 20 f4 f3 ed ea f6 e8  ... ..... ......
0160: ee ed e0 eb fc ed ee f1 f2 fc 20 f5 e5 f8 2d f2  .......... ...-.
0170: e0 e1 eb e8 f6 fb 0d 0a 63 6c 61 73 73 20 43 4e  ........class CN
0180: 6f 43 61 73 65 4d 61 70 42 61 73 65 0d 0a 7b 0d  oCaseMapBase..{.
0190: 0a 70 75 62 6c 69 63 3a 0d 0a 09 69 6e 74 20 47  .public:...int G
01a0: 65 74 43 6f 75 6e 74 28 29 20 63 6f 6e 73 74 0d  etCount() const.
01b0: 0a 09 09 7b 72 65 74 75 72 6e 20 6d 5f 6e 43 6f  ...{return m_nCo
01c0: 75 6e 74 3b 7d 0d 0a 09 42 4f 4f 4c 20 49 73 45  unt;}...BOOL IsE
01d0: 6d 70 74 79 28 29 20 63 6f 6e 73 74 0d 0a 09 09  mpty() const....
01e0: 7b 72 65 74 75 72 6e 20 6d 5f 6e 43 6f 75 6e 74  {return m_nCount
01f0: 21 3d 30 3b 7d 0d 0a 09 50 4f 53 49 54 49 4f 4e  !=0;}...POSITION
0200: 20 47 65 74 53 74 61 72 74 50 6f 73 69 74 69 6f   GetStartPositio
0210: 6e 28 29 20 63 6f 6e 73 74 0d 0a 09 09 7b 72 65  n() const....{re
0220: 74 75 72 6e 20 6d 5f 6e 43 6f 75 6e 74 20 3f 20  turn m_nCount ? 
0230: 42 45 46 4f 52 45 5f 53 54 41 52 54 5f 50 4f 53  BEFORE_START_POS
0240: 49 54 49 4f 4e 20 3a 20 4e 55 4c 4c 3b 7d 0d 0a  ITION : NULL;}..
0250: 09 55 49 4e 54 20 47 65 74 48 61 73 68 54 61 62  .UINT GetHashTab
0260: 6c 65 53 69 7a 65 28 29 20 63 6f 6e 73 74 0d 0a  leSize() const..
0270: 09 09 7b 72 65 74 75 72 6e 20 6d 5f 6e 48 61 73  ..{return m_nHas
0280: 68 54 61 62 6c 65 53 69 7a 65 3b 7d 0d 0a 0d 0a  hTableSize;}....
0290: 09 76 6f 69 64 20 50 72 65 70 65 61 72 65 48 61  .void PrepeareHa
02a0: 73 68 54 61 62 6c 65 28 44 57 4f 52 44 20 6e 43  shTable(DWORD nC
02b0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 09 73 74 72 75 63  ount);.....struc
02c0: 74 20 43 41 73 73 6f 63 0d 0a 09 7b 0d 0a 09 09  t CAssoc...{....
02d0: 43 41 73 73 6f 63 28 44 57 4f 52 44 20 6e 48 61  CAssoc(DWORD nHa
02e0: 73 68 2c 20 43 41 73 73 6f 63 2a 26 20 70 29 3a  sh, CAssoc*& p):
02f0: 6e 48 61 73 68 56 61 6c 75 65 28 6e 48 61 73 68  nHashValue(nHash
0300: 29 2c 20 70 4e 65 78 74 28 70 29 7b 70 3d 74 68  ), pNext(p){p=th
0310: 69 73 3b 7d 0d 0a 09 09 43 41 73 73 6f 63 2a 20  is;}....CAssoc* 
0320: 70 4e 65 78 74 3b 0d 0a 09 09 44 57 4f 52 44 20  pNext;....DWORD 
0330: 6e 48 61 73 68 56 61 6c 75 65 3b 0d 0a 09 7d 3b  nHashValue;...};
0340: 0d 0a 09 73 74 61 74 69 63 20 44 57 4f 52 44 20  ...static DWORD 
0350: 6d 5f 6c 6f 74 61 62 6c 65 5b 32 35 36 5d 3b 0d  m_lotable[256];.
0360: 0a 70 72 6f 74 65 63 74 65 64 3a 0d 0a 09 43 41  .protected:...CA
0370: 73 73 6f 63 2a 2a 20 6d 5f 70 48 61 73 68 54 61  ssoc** m_pHashTa
0380: 62 6c 65 3b 0d 0a 09 44 57 4f 52 44 20 6d 5f 6e  ble;...DWORD m_n
0390: 48 61 73 68 54 61 62 6c 65 53 69 7a 65 3b 0d 0a  HashTableSize;..
03a0: 0d 0a 09 44 57 4f 52 44 20 6d 5f 6e 43 6f 75 6e  ...DWORD m_nCoun
03b0: 74 3b 0d 0a 09 43 41 73 73 6f 63 2a 20 6d 5f 70  t;...CAssoc* m_p
03c0: 46 72 65 65 4c 69 73 74 3b 0d 0a 09 73 74 72 75  FreeList;...stru
03d0: 63 74 20 43 50 6c 65 78 2a 20 6d 5f 70 42 6c 6f  ct CPlex* m_pBlo
03e0: 63 6b 73 3b 0d 0a 0d 0a 09 73 74 72 75 63 74 20  cks;.....struct 
03f0: 69 6e 69 74 0d 0a 09 7b 0d 0a 09 09 69 6e 69 74  init...{....init
0400: 28 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 6f 72 28  ()....{.....for(
0410: 44 57 4f 52 44 20 69 3d 30 3b 69 3c 32 35 36 3b  DWORD i=0;i<256;
0420: 69 2b 2b 29 0d 0a 09 09 09 09 6d 5f 6c 6f 74 61  i++)......m_lota
0430: 62 6c 65 5b 69 5d 3d 28 44 57 4f 52 44 29 43 68  ble[i]=(DWORD)Ch
0440: 61 72 4c 6f 77 65 72 28 28 4c 50 53 54 52 29 69  arLower((LPSTR)i
0450: 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 3b 0d 0a 09 73  );....}...};...s
0460: 74 61 74 69 63 20 69 6e 69 74 20 6d 5f 6c 6f 74  tatic init m_lot
0470: 61 62 6c 65 69 6e 69 74 3b 0d 0a 09 66 72 69 65  ableinit;...frie
0480: 6e 64 20 73 74 72 75 63 74 20 69 6e 69 74 3b 0d  nd struct init;.
0490: 0a 0d 0a 09 43 4e 6f 43 61 73 65 4d 61 70 42 61  ....CNoCaseMapBa
04a0: 73 65 28 29 3a 0d 0a 09 09 6d 5f 70 48 61 73 68  se():....m_pHash
04b0: 54 61 62 6c 65 28 4e 55 4c 4c 29 2c 20 6d 5f 6e  Table(NULL), m_n
04c0: 43 6f 75 6e 74 28 30 29 2c 20 6d 5f 6e 48 61 73  Count(0), m_nHas
04d0: 68 54 61 62 6c 65 53 69 7a 65 28 30 29 2c 0d 0a  hTableSize(0),..
04e0: 09 09 6d 5f 70 46 72 65 65 4c 69 73 74 28 4e 55  ..m_pFreeList(NU
04f0: 4c 4c 29 2c 20 6d 5f 70 42 6c 6f 63 6b 73 28 4e  LL), m_pBlocks(N
0500: 55 4c 4c 29 7b 7d 0d 0a 0d 0a 09 76 6f 69 64 20  ULL){}.....void 
0510: 44 65 6c 65 74 65 41 6c 6c 28 29 0d 0a 09 7b 0d  DeleteAll()...{.
0520: 0a 09 09 64 65 6c 65 74 65 20 5b 5d 20 6d 5f 70  ...delete [] m_p
0530: 48 61 73 68 54 61 62 6c 65 3b 0d 0a 09 09 6d 5f  HashTable;....m_
0540: 70 48 61 73 68 54 61 62 6c 65 20 3d 20 4e 55 4c  pHashTable = NUL
0550: 4c 3b 0d 0a 09 09 6d 5f 6e 48 61 73 68 54 61 62  L;....m_nHashTab
0560: 6c 65 53 69 7a 65 20 3d 20 30 3b 0d 0a 09 09 6d  leSize = 0;....m
0570: 5f 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 09 09  _nCount = 0;....
0580: 6d 5f 70 46 72 65 65 4c 69 73 74 20 3d 20 4e 55  m_pFreeList = NU
0590: 4c 4c 3b 0d 0a 09 09 69 66 28 6d 5f 70 42 6c 6f  LL;....if(m_pBlo
05a0: 63 6b 73 29 0d 0a 09 09 7b 0d 0a 09 09 09 6d 5f  cks)....{.....m_
05b0: 70 42 6c 6f 63 6b 73 2d 3e 46 72 65 65 44 61 74  pBlocks->FreeDat
05c0: 61 43 68 61 69 6e 28 29 3b 0d 0a 09 09 09 6d 5f  aChain();.....m_
05d0: 70 42 6c 6f 63 6b 73 20 3d 20 4e 55 4c 4c 3b 0d  pBlocks = NULL;.
05e0: 0a 09 09 7d 0d 0a 09 7d 0d 0a 0d 0a 0d 0a 09 43  ...}...}.......C
05f0: 41 73 73 6f 63 2a 20 4e 65 77 41 73 73 6f 63 28  Assoc* NewAssoc(
0600: 73 69 7a 65 5f 74 20 41 73 73 6f 63 53 69 7a 65  size_t AssocSize
0610: 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 6d 5f 70 46  )...{....if(m_pF
0620: 72 65 65 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29  reeList == NULL)
0630: 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 61 64 64  ....{.....// add
0640: 20 61 6e 6f 74 68 65 72 20 62 6c 6f 63 6b 0d 0a   another block..
0650: 09 09 09 43 50 6c 65 78 2a 20 6e 65 77 42 6c 6f  ...CPlex* newBlo
0660: 63 6b 20 3d 20 43 50 6c 65 78 3a 3a 43 72 65 61  ck = CPlex::Crea
0670: 74 65 28 6d 5f 70 42 6c 6f 63 6b 73 2c 20 39 2c  te(m_pBlocks, 9,
0680: 20 41 73 73 6f 63 53 69 7a 65 29 3b 0d 0a 09 09   AssocSize);....
0690: 09 2f 2f 20 63 68 61 69 6e 20 74 68 65 6d 20 69  .// chain them i
06a0: 6e 74 6f 20 66 72 65 65 20 6c 69 73 74 0d 0a 09  nto free list...
06b0: 09 09 63 68 61 72 2a 20 70 41 73 73 6f 63 20 3d  ..char* pAssoc =
06c0: 20 73 74 61 74 69 63 5f 63 61 73 74 3c 63 68 61   static_cast<cha
06d0: 72 2a 3e 28 6e 65 77 42 6c 6f 63 6b 2d 3e 64 61  r*>(newBlock->da
06e0: 74 61 28 29 29 3b 0d 0a 09 09 09 2f 2f 20 66 72  ta());.....// fr
06f0: 65 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ee in reverse or
0700: 64 65 72 20 74 6f 20 6d 61 6b 65 20 69 74 20 65  der to make it e
0710: 61 73 69 65 72 20 74 6f 20 64 65 62 75 67 0d 0a  asier to debug..
0720: 09 09 09 70 41 73 73 6f 63 20 2b 3d 20 28 38 20  ...pAssoc += (8 
0730: 2a 20 41 73 73 6f 63 53 69 7a 65 29 3b 0d 0a 09  * AssocSize);...
0740: 09 09 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 38  ..for (int i = 8
0750: 3b 20 69 20 3e 3d 20 30 3b 20 2d 2d 69 2c 20 70  ; i >= 0; --i, p
0760: 41 73 73 6f 63 2d 3d 41 73 73 6f 63 53 69 7a 65  Assoc-=AssocSize
0770: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 72 65 69  ).....{......rei
0780: 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 43 41  nterpret_cast<CA
0790: 73 73 6f 63 2a 3e 28 70 41 73 73 6f 63 29 2d 3e  ssoc*>(pAssoc)->
07a0: 70 4e 65 78 74 20 3d 20 6d 5f 70 46 72 65 65 4c  pNext = m_pFreeL
07b0: 69 73 74 3b 0d 0a 09 09 09 09 6d 5f 70 46 72 65  ist;......m_pFre
07c0: 65 4c 69 73 74 20 3d 20 72 65 69 6e 74 65 72 70  eList = reinterp
07d0: 72 65 74 5f 63 61 73 74 3c 43 41 73 73 6f 63 2a  ret_cast<CAssoc*
07e0: 3e 28 70 41 73 73 6f 63 29 3b 0d 0a 09 09 09 7d  >(pAssoc);.....}
07f0: 0d 0a 09 09 7d 0d 0a 09 09 2b 2b 6d 5f 6e 43 6f  ....}....++m_nCo
0800: 75 6e 74 3b 0d 0a 09 09 43 41 73 73 6f 63 2a 20  unt;....CAssoc* 
0810: 70 41 73 73 6f 63 20 3d 20 6d 5f 70 46 72 65 65  pAssoc = m_pFree
0820: 4c 69 73 74 3b 0d 0a 09 09 6d 5f 70 46 72 65 65  List;....m_pFree
0830: 4c 69 73 74 20 3d 20 6d 5f 70 46 72 65 65 4c 69  List = m_pFreeLi
0840: 73 74 2d 3e 70 4e 65 78 74 3b 0d 0a 09 09 72 65  st->pNext;....re
0850: 74 75 72 6e 20 70 41 73 73 6f 63 3b 0d 0a 09 7d  turn pAssoc;...}
0860: 0d 0a 09 76 6f 69 64 20 46 72 65 65 41 73 73 6f  ...void FreeAsso
0870: 63 28 43 41 73 73 6f 63 2a 20 70 41 73 73 6f 63  c(CAssoc* pAssoc
0880: 29 0d 0a 09 7b 0d 0a 09 09 70 41 73 73 6f 63 2d  )...{....pAssoc-
0890: 3e 70 4e 65 78 74 20 3d 20 6d 5f 70 46 72 65 65  >pNext = m_pFree
08a0: 4c 69 73 74 3b 0d 0a 09 09 6d 5f 70 46 72 65 65  List;....m_pFree
08b0: 4c 69 73 74 20 3d 20 70 41 73 73 6f 63 3b 0d 0a  List = pAssoc;..
08c0: 09 09 2d 2d 6d 5f 6e 43 6f 75 6e 74 3b 0d 0a 09  ..--m_nCount;...
08d0: 7d 0d 0a 0d 0a 09 44 57 4f 52 44 20 43 61 6c 63  }.....DWORD Calc
08e0: 48 61 73 68 53 69 7a 65 28 44 57 4f 52 44 20 6e  HashSize(DWORD n
08f0: 43 6f 75 6e 74 29 0d 0a 09 7b 0d 0a 09 09 44 57  Count)...{....DW
0900: 4f 52 44 20 68 73 20 3d 20 28 6e 43 6f 75 6e 74  ORD hs = (nCount
0910: 20 2b 20 28 6e 43 6f 75 6e 74 3e 3e 31 29 29 20   + (nCount>>1)) 
0920: 7c 20 31 3b 0d 0a 09 09 69 66 28 68 73 3e 31 30  | 1;....if(hs>10
0930: 31 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 6f 72 28  1)....{.....for(
0940: 44 57 4f 52 44 20 69 3d 33 3b 20 69 20 2a 20 69  DWORD i=3; i * i
0950: 20 3c 3d 20 68 73 3b 20 69 2b 3d 32 29 0d 0a 09   <= hs; i+=2)...
0960: 09 09 7b 0d 0a 09 09 09 09 69 66 28 68 73 20 25  ..{......if(hs %
0970: 20 69 20 3d 3d 20 30 29 0d 0a 09 09 09 09 7b 0d   i == 0)......{.
0980: 0a 09 09 09 09 09 68 73 2b 3d 32 3b 0d 0a 09 09  ......hs+=2;....
0990: 09 09 09 69 3d 31 3b 0d 0a 09 09 09 09 7d 0d 0a  ...i=1;......}..
09a0: 09 09 09 7d 0d 0a 09 09 09 72 65 74 75 72 6e 20  ...}.....return 
09b0: 68 73 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65  hs;....}....else
09c0: 20 69 66 28 68 73 20 3c 3d 20 31 33 29 0d 0a 09   if(hs <= 13)...
09d0: 09 09 72 65 74 75 72 6e 20 31 33 3b 0d 0a 09 09  ..return 13;....
09e0: 65 6c 73 65 20 69 66 28 68 73 20 3c 3d 20 32 33  else if(hs <= 23
09f0: 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 32 33 3b  ).....return 23;
0a00: 0d 0a 09 09 65 6c 73 65 20 69 66 28 68 73 20 3c  ....else if(hs <
0a10: 3d 20 33 37 29 0d 0a 09 09 09 72 65 74 75 72 6e  = 37).....return
0a20: 20 33 37 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28   37;....else if(
0a30: 68 73 20 3c 3d 20 35 33 29 0d 0a 09 09 09 72 65  hs <= 53).....re
0a40: 74 75 72 6e 20 35 33 3b 0d 0a 09 09 65 6c 73 65  turn 53;....else
0a50: 20 69 66 28 68 73 20 3c 3d 20 37 31 29 0d 0a 09   if(hs <= 71)...
0a60: 09 09 72 65 74 75 72 6e 20 37 31 3b 0d 0a 09 09  ..return 71;....
0a70: 65 6c 73 65 0d 0a 09 09 09 72 65 74 75 72 6e 20  else.....return 
0a80: 31 30 31 3b 0d 0a 09 7d 0d 0a 0d 0a 09 73 74 61  101;...}.....sta
0a90: 74 69 63 20 42 4f 4f 4c 20 49 73 53 74 72 45 71  tic BOOL IsStrEq
0aa0: 75 61 6c 28 4c 50 43 53 54 52 20 70 74 72 31 2c  ual(LPCSTR ptr1,
0ab0: 20 4c 50 43 53 54 52 20 70 74 72 32 29 0d 0a 09   LPCSTR ptr2)...
0ac0: 7b 0d 0a 09 09 66 6f 72 28 44 57 4f 52 44 20 73  {....for(DWORD s
0ad0: 31 3d 6e 63 6d 5f 73 79 6d 62 3a 3a 73 79 6d 62  1=ncm_symb::symb
0ae0: 6f 6c 28 70 74 72 31 29 2c 20 73 32 3d 6e 63 6d  ol(ptr1), s2=ncm
0af0: 5f 73 79 6d 62 3a 3a 73 79 6d 62 6f 6c 28 70 74  _symb::symbol(pt
0b00: 72 32 29 3b 20 3b 73 31 3d 6e 63 6d 5f 73 79 6d  r2); ;s1=ncm_sym
0b10: 62 3a 3a 73 79 6d 62 6f 6c 28 2b 2b 70 74 72 31  b::symbol(++ptr1
0b20: 29 2c 20 73 32 3d 6e 63 6d 5f 73 79 6d 62 3a 3a  ), s2=ncm_symb::
0b30: 73 79 6d 62 6f 6c 28 2b 2b 70 74 72 32 29 29 0d  symbol(++ptr2)).
0b40: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 6d 5f 6c 6f  ...{.....if(m_lo
0b50: 74 61 62 6c 65 5b 73 31 5d 20 21 3d 20 6d 5f 6c  table[s1] != m_l
0b60: 6f 74 61 62 6c 65 5b 73 32 5d 29 0d 0a 09 09 09  otable[s2]).....
0b70: 09 72 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a  .return FALSE;..
0b80: 09 09 09 69 66 28 21 73 32 29 0d 0a 09 09 09 09  ...if(!s2)......
0b90: 72 65 74 75 72 6e 20 21 73 31 3b 0d 0a 09 09 7d  return !s1;....}
0ba0: 0d 0a 09 7d 0d 0a 0d 0a 09 73 74 61 74 69 63 20  ...}.....static 
0bb0: 44 57 4f 52 44 20 47 65 74 48 61 73 68 28 4c 50  DWORD GetHash(LP
0bc0: 43 53 54 52 20 6b 65 79 29 0d 0a 09 7b 0d 0a 09  CSTR key)...{...
0bd0: 09 2f 2f 20 c8 f1 ef ee eb fc e7 f3 e5 f2 f1 ff  .// ............
0be0: 20 46 4e 56 2d 31 61 20 e0 eb e3 ee f0 e8 f2 ec   FNV-1a ........
0bf0: 0d 0a 09 09 2f 2f 20 68 74 74 70 3a 2f 2f 77 77  ....// http://ww
0c00: 77 2e 69 73 74 68 65 2e 63 6f 6d 2f 63 68 6f 6e  w.isthe.com/chon
0c10: 67 6f 2f 74 65 63 68 2f 63 6f 6d 70 2f 66 6e 76  go/tech/comp/fnv
0c20: 2f 0d 0a 09 09 44 57 4f 52 44 20 68 3d 32 31 36  /....DWORD h=216
0c30: 36 31 33 36 32 36 31 75 6c 3b 0d 0a 09 09 77 68  6136261ul;....wh
0c40: 69 6c 65 28 44 57 4f 52 44 20 73 79 6d 62 3d 6d  ile(DWORD symb=m
0c50: 5f 6c 6f 74 61 62 6c 65 5b 6e 63 6d 5f 73 79 6d  _lotable[ncm_sym
0c60: 62 3a 3a 73 79 6d 62 6f 6c 28 6b 65 79 2b 2b 29  b::symbol(key++)
0c70: 5d 29 0d 0a 09 09 09 68 20 3d 20 28 68 20 5e 20  ]).....h = (h ^ 
0c80: 73 79 6d 62 29 20 2a 20 31 36 37 37 37 36 31 39  symb) * 16777619
0c90: 75 6c 3b 0d 0a 09 09 72 65 74 75 72 6e 20 68 3b  ul;....return h;
0ca0: 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 20 ce  ...}..};....// .
0cb0: ef e8 f1 e0 ed e8 e5 20 f1 f2 f0 e0 f2 e5 e3 e8  ....... ........
0cc0: e9 20 f5 f0 e0 ed e5 ed e8 ff 2c 20 f3 f1 f2 e0  . ........, ....
0cd0: ed ee e2 ea e8 2c 20 ef ee eb f3 f7 e5 ed e8 ff  ....., .........
0ce0: 20 ea eb fe f7 e5 e9 0d 0a 2f 2f 20 d1 f2 f0 e0   ........// ....
0cf0: f2 e5 e3 e8 ff 20 ef ee 20 f3 ec ee eb f7 e0 ed  ..... .. .......
0d00: e8 fe 2e 0d 0a 73 74 72 75 63 74 20 64 65 66 61  .....struct defa
0d10: 75 6c 74 5f 6d 61 70 0d 0a 7b 0d 0a 09 74 79 70  ult_map..{...typ
0d20: 65 64 65 66 20 43 53 74 72 69 6e 67 20 6b 65 79  edef CString key
0d30: 5f 74 79 70 65 3b 09 09 09 09 2f 2f 20 d2 e8 ef  _type;....// ...
0d40: 20 f5 f0 e0 ed e5 ed e8 ff 20 ea eb fe f7 e0 20   ........ ..... 
0d50: e2 20 43 41 73 73 6f 63 20 28 c4 ee eb e6 e5 ed  . CAssoc (......
0d60: 20 ef f0 e8 e2 ee e4 e8 f2 f1 ff 20 ea 20 4c 50   .......... . LP
0d70: 43 53 54 52 29 0d 0a 09 74 79 70 65 64 65 66 20  CSTR)...typedef 
0d80: 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20 6b  const CString& k
0d90: 65 79 73 72 63 5f 74 79 70 65 3b 09 09 2f 2f 20  eysrc_type;..// 
0da0: d2 e8 ef 20 ef e5 f0 e5 e4 e0 f7 e8 20 ea eb fe  ... ........ ...
0db0: f7 e0 20 ef f0 e8 20 e7 e0 ed e5 f1 e5 ed e8 e8  .. ... .........
0dc0: 20 ef e0 f0 20 28 c4 ee eb e6 e5 ed 20 ef f0 e8   ... (...... ...
0dd0: e2 ee e4 e8 f2 f1 ff 20 ea 20 4c 50 43 53 54 52  ....... . LPCSTR
0de0: 29 0d 0a 09 74 79 70 65 64 65 66 20 43 53 74 72  )...typedef CStr
0df0: 69 6e 67 20 6b 65 79 64 73 74 5f 74 79 70 65 3b  ing keydst_type;
0e00: 09 09 09 2f 2f 20 d2 e8 ef 20 ef f0 e8 e5 ec ed  ...// ... ......
0e10: e8 ea e0 20 ea eb fe f7 e0 20 ef f0 e8 20 ee e1  ... ..... ... ..
0e20: f5 ee e4 e5 20 ea e0 f0 f2 fb 2e 20 28 c4 ee eb  .... ...... (...
0e30: e6 e5 ed 20 ef f0 e8 f1 e2 e0 e8 e2 e0 f2 fc f1  ... ............
0e40: ff 20 e8 e7 20 6b 65 79 5f 74 79 70 65 29 0d 0a  . .. key_type)..
0e50: 7d 3b 0d 0a 0d 0a 2f 2f 20 d5 f0 e0 ed e5 ed e8  };....// .......
0e60: e5 20 f7 e8 f1 f2 ee 20 f1 f1 fb eb ee ea 20 ed  . ..... ...... .
0e70: e0 20 e2 ed e5 f8 ed e8 e5 20 ea eb fe f7 e8 0d  . ....... ......
0e80: 0a 73 74 72 75 63 74 20 72 65 66 6b 65 79 5f 6d  .struct refkey_m
0e90: 61 70 0d 0a 7b 0d 0a 09 74 79 70 65 64 65 66 20  ap..{...typedef 
0ea0: 4c 50 43 53 54 52 20 6b 65 79 5f 74 79 70 65 3b  LPCSTR key_type;
0eb0: 0d 0a 09 74 79 70 65 64 65 66 20 4c 50 43 53 54  ...typedef LPCST
0ec0: 52 20 6b 65 79 73 72 63 5f 74 79 70 65 3b 0d 0a  R keysrc_type;..
0ed0: 09 74 79 70 65 64 65 66 20 4c 50 43 53 54 52 20  .typedef LPCSTR 
0ee0: 6b 65 79 64 73 74 5f 74 79 70 65 3b 0d 0a 7d 3b  keydst_type;..};
0ef0: 0d 0a 0d 0a 2f 2f 20 d5 f0 e0 ed e5 ed e8 e5 20  ....// ........ 
0f00: ea ee ef e8 e8 20 ea eb fe f7 e0 20 e1 e5 e7 20  ..... ..... ... 
0f10: 43 53 74 72 69 6e 67 0d 0a 73 74 72 75 63 74 20  CString..struct 
0f20: 63 68 61 72 63 6f 70 79 5f 6d 61 70 0d 0a 7b 0d  charcopy_map..{.
0f30: 0a 09 73 74 72 75 63 74 20 6b 65 79 0d 0a 09 7b  ..struct key...{
0f40: 0d 0a 09 09 6b 65 79 28 4c 50 43 53 54 52 20 70  ....key(LPCSTR p
0f50: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 6e 74 20 6c  )....{.....int l
0f60: 65 6e 3d 73 74 72 6c 65 6e 28 70 29 3b 0d 0a 09  en=strlen(p);...
0f70: 09 09 70 74 72 3d 6e 65 77 20 63 68 61 72 5b 6c  ..ptr=new char[l
0f80: 65 6e 2b 31 5d 3b 0d 0a 09 09 09 6d 65 6d 63 70  en+1];.....memcp
0f90: 79 28 70 74 72 2c 20 70 2c 20 6c 65 6e 29 3b 0d  y(ptr, p, len);.
0fa0: 0a 09 09 09 70 74 72 5b 6c 65 6e 5d 3d 30 3b 0d  ....ptr[len]=0;.
0fb0: 0a 09 09 7d 0d 0a 09 09 7e 6b 65 79 28 29 7b 64  ...}....~key(){d
0fc0: 65 6c 65 74 65 20 5b 5d 20 70 74 72 3b 7d 0d 0a  elete [] ptr;}..
0fd0: 09 09 6f 70 65 72 61 74 6f 72 20 4c 50 43 53 54  ..operator LPCST
0fe0: 52 28 29 7b 72 65 74 75 72 6e 20 70 74 72 3b 7d  R(){return ptr;}
0ff0: 0d 0a 09 09 4c 50 53 54 52 20 70 74 72 3b 0d 0a  ....LPSTR ptr;..
1000: 09 7d 3b 0d 0a 09 74 79 70 65 64 65 66 20 6b 65  .};...typedef ke
1010: 79 20 6b 65 79 5f 74 79 70 65 3b 0d 0a 09 74 79  y key_type;...ty
1020: 70 65 64 65 66 20 4c 50 43 53 54 52 20 6b 65 79  pedef LPCSTR key
1030: 73 72 63 5f 74 79 70 65 3b 0d 0a 09 74 79 70 65  src_type;...type
1040: 64 65 66 20 4c 50 43 53 54 52 20 6b 65 79 64 73  def LPCSTR keyds
1050: 74 5f 74 79 70 65 3b 0d 0a 7d 3b 0d 0a 0d 0a 0d  t_type;..};.....
1060: 0a 2f 2f 20 d1 ee e1 f1 f2 e2 e5 ed ed ee 2c 20  .// .........., 
1070: f1 e0 ec 20 f8 e0 e1 eb ee ed 2e 0d 0a 74 65 6d  ... .........tem
1080: 70 6c 61 74 65 3c 74 79 70 65 6e 61 6d 65 20 54  plate<typename T
1090: 56 61 6c 2c 20 74 79 70 65 6e 61 6d 65 20 54 41  Val, typename TA
10a0: 72 67 3d 54 56 61 6c 2c 20 74 79 70 65 6e 61 6d  rg=TVal, typenam
10b0: 65 20 53 3d 64 65 66 61 75 6c 74 5f 6d 61 70 3e  e S=default_map>
10c0: 0d 0a 63 6c 61 73 73 20 43 4e 6f 43 61 73 65 4d  ..class CNoCaseM
10d0: 61 70 20 3a 20 70 75 62 6c 69 63 20 43 4e 6f 43  ap : public CNoC
10e0: 61 73 65 4d 61 70 42 61 73 65 0d 0a 7b 0d 0a 70  aseMapBase..{..p
10f0: 75 62 6c 69 63 3a 0d 0a 09 74 79 70 65 64 65 66  ublic:...typedef
1100: 20 54 56 61 6c 20 76 61 6c 75 65 5f 74 79 70 65   TVal value_type
1110: 3b 0d 0a 09 74 79 70 65 64 65 66 20 54 41 72 67  ;...typedef TArg
1120: 20 76 61 6c 75 65 61 72 67 5f 74 79 70 65 3b 0d   valuearg_type;.
1130: 0a 09 74 79 70 65 64 65 66 20 53 20 6d 61 70 5f  ..typedef S map_
1140: 73 74 72 61 74 65 67 79 3b 0d 0a 09 74 79 70 65  strategy;...type
1150: 64 65 66 20 74 79 70 65 6e 61 6d 65 20 6d 61 70  def typename map
1160: 5f 73 74 72 61 74 65 67 79 3a 3a 6b 65 79 5f 74  _strategy::key_t
1170: 79 70 65 20 6b 65 79 5f 74 79 70 65 3b 0d 0a 09  ype key_type;...
1180: 74 79 70 65 64 65 66 20 74 79 70 65 6e 61 6d 65  typedef typename
1190: 20 6d 61 70 5f 73 74 72 61 74 65 67 79 3a 3a 6b   map_strategy::k
11a0: 65 79 73 72 63 5f 74 79 70 65 20 6b 65 79 73 72  eysrc_type keysr
11b0: 63 5f 74 79 70 65 3b 0d 0a 09 74 79 70 65 64 65  c_type;...typede
11c0: 66 20 74 79 70 65 6e 61 6d 65 20 6d 61 70 5f 73  f typename map_s
11d0: 74 72 61 74 65 67 79 3a 3a 6b 65 79 64 73 74 5f  trategy::keydst_
11e0: 74 79 70 65 20 6b 65 79 64 73 74 5f 74 79 70 65  type keydst_type
11f0: 3b 0d 0a 0d 0a 09 43 4e 6f 43 61 73 65 4d 61 70  ;.....CNoCaseMap
1200: 28 29 20 3a 20 43 4e 6f 43 61 73 65 4d 61 70 42  () : CNoCaseMapB
1210: 61 73 65 28 29 7b 7d 0d 0a 09 7e 43 4e 6f 43 61  ase(){}...~CNoCa
1220: 73 65 4d 61 70 28 29 7b 52 65 6d 6f 76 65 41 6c  seMap(){RemoveAl
1230: 6c 28 29 3b 7d 0d 0a 0d 0a 09 42 4f 4f 4c 20 49  l();}.....BOOL I
1240: 73 45 78 69 73 74 28 4c 50 43 53 54 52 20 6b 65  sExist(LPCSTR ke
1250: 79 29 20 63 6f 6e 73 74 0d 0a 09 7b 0d 0a 09 09  y) const...{....
1260: 44 57 4f 52 44 20 6e 46 75 6c 6c 48 61 73 68 3b  DWORD nFullHash;
1270: 0d 0a 09 09 61 73 73 6f 63 2a 20 70 41 73 73 6f  ....assoc* pAsso
1280: 63 20 3d 20 47 65 74 41 73 73 6f 63 41 74 28 6b  c = GetAssocAt(k
1290: 65 79 2c 20 6e 46 75 6c 6c 48 61 73 68 29 3b 0d  ey, nFullHash);.
12a0: 0a 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 20 21  ...return NULL !
12b0: 3d 20 70 41 73 73 6f 63 3b 0d 0a 09 7d 0d 0a 0d  = pAssoc;...}...
12c0: 0a 09 42 4f 4f 4c 20 4c 6f 6f 6b 75 70 28 4c 50  ..BOOL Lookup(LP
12d0: 43 53 54 52 20 6b 65 79 2c 20 76 61 6c 75 65 5f  CSTR key, value_
12e0: 74 79 70 65 26 20 72 56 61 6c 75 65 29 20 63 6f  type& rValue) co
12f0: 6e 73 74 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44  nst...{....DWORD
1300: 20 6e 46 75 6c 6c 48 61 73 68 3b 0d 0a 09 09 61   nFullHash;....a
1310: 73 73 6f 63 2a 20 70 41 73 73 6f 63 20 3d 20 47  ssoc* pAssoc = G
1320: 65 74 41 73 73 6f 63 41 74 28 6b 65 79 2c 20 6e  etAssocAt(key, n
1330: 46 75 6c 6c 48 61 73 68 29 3b 0d 0a 09 09 69 66  FullHash);....if
1340: 28 21 70 41 73 73 6f 63 29 0d 0a 09 09 09 72 65  (!pAssoc).....re
1350: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 72  turn FALSE;....r
1360: 56 61 6c 75 65 20 3d 20 70 41 73 73 6f 63 2d 3e  Value = pAssoc->
1370: 76 61 6c 75 65 3b 0d 0a 09 09 72 65 74 75 72 6e  value;....return
1380: 20 54 52 55 45 3b 0d 0a 09 7d 0d 0a 09 0d 0a 09   TRUE;...}......
1390: 42 4f 4f 4c 20 4c 6f 6f 6b 75 70 4b 65 79 28 4c  BOOL LookupKey(L
13a0: 50 43 53 54 52 20 6b 65 79 2c 20 6b 65 79 64 73  PCSTR key, keyds
13b0: 74 5f 74 79 70 65 26 20 72 4b 65 79 29 20 63 6f  t_type& rKey) co
13c0: 6e 73 74 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44  nst...{....DWORD
13d0: 20 6e 46 75 6c 6c 48 61 73 68 3b 0d 0a 09 09 61   nFullHash;....a
13e0: 73 73 6f 63 2a 20 70 41 73 73 6f 63 20 3d 20 47  ssoc* pAssoc = G
13f0: 65 74 41 73 73 6f 63 41 74 28 6b 65 79 2c 20 6e  etAssocAt(key, n
1400: 46 75 6c 6c 48 61 73 68 29 3b 0d 0a 09 09 69 66  FullHash);....if
1410: 28 21 70 41 73 73 6f 63 29 0d 0a 09 09 09 72 65  (!pAssoc).....re
1420: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 72  turn FALSE;....r
1430: 4b 65 79 20 3d 20 70 41 73 73 6f 63 2d 3e 6b 65  Key = pAssoc->ke
1440: 79 3b 0d 0a 09 09 72 65 74 75 72 6e 20 54 52 55  y;....return TRU
1450: 45 3b 0d 0a 09 7d 0d 0a 0d 0a 09 76 61 6c 75 65  E;...}.....value
1460: 5f 74 79 70 65 26 20 6f 70 65 72 61 74 6f 72 5b  _type& operator[
1470: 5d 28 6b 65 79 73 72 63 5f 74 79 70 65 20 6b 65  ](keysrc_type ke
1480: 79 29 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20  y)...{....DWORD 
1490: 6e 46 75 6c 6c 48 61 73 68 3b 0d 0a 09 09 61 73  nFullHash;....as
14a0: 73 6f 63 2a 20 70 41 73 73 6f 63 3b 0d 0a 09 09  soc* pAssoc;....
14b0: 69 66 28 21 28 70 41 73 73 6f 63 20 3d 20 47 65  if(!(pAssoc = Ge
14c0: 74 41 73 73 6f 63 41 74 28 6b 65 79 2c 20 6e 46  tAssocAt(key, nF
14d0: 75 6c 6c 48 61 73 68 29 29 29 0d 0a 09 09 7b 0d  ullHash)))....{.
14e0: 0a 09 09 09 69 66 28 21 6d 5f 70 48 61 73 68 54  ....if(!m_pHashT
14f0: 61 62 6c 65 20 7c 7c 20 6d 5f 6e 43 6f 75 6e 74  able || m_nCount
1500: 20 3e 3d 20 6d 5f 6e 48 61 73 68 54 61 62 6c 65   >= m_nHashTable
1510: 53 69 7a 65 20 2a 20 33 20 2f 20 34 29 0d 0a 09  Size * 3 / 4)...
1520: 09 09 09 50 72 65 70 65 61 72 65 48 61 73 68 54  ...PrepeareHashT
1530: 61 62 6c 65 28 6d 5f 6e 43 6f 75 6e 74 2b 31 29  able(m_nCount+1)
1540: 3b 0d 0a 09 09 09 2f 2f 20 69 74 20 64 6f 65 73  ;.....// it does
1550: 6e 27 74 20 65 78 69 73 74 2c 20 61 64 64 20 61  n't exist, add a
1560: 20 6e 65 77 20 41 73 73 6f 63 69 61 74 69 6f 6e   new Association
1570: 0d 0a 09 09 09 70 41 73 73 6f 63 20 3d 20 73 74  .....pAssoc = st
1580: 61 74 69 63 5f 63 61 73 74 3c 61 73 73 6f 63 2a  atic_cast<assoc*
1590: 3e 28 4e 65 77 41 73 73 6f 63 28 73 69 7a 65 6f  >(NewAssoc(sizeo
15a0: 66 28 61 73 73 6f 63 29 29 29 3b 0d 0a 09 09 09  f(assoc)));.....
15b0: 70 41 73 73 6f 63 2d 3e 61 73 73 6f 63 3a 3a 61  pAssoc->assoc::a
15c0: 73 73 6f 63 28 6e 46 75 6c 6c 48 61 73 68 2c 20  ssoc(nFullHash, 
15d0: 6d 5f 70 48 61 73 68 54 61 62 6c 65 5b 6e 46 75  m_pHashTable[nFu
15e0: 6c 6c 48 61 73 68 20 25 20 6d 5f 6e 48 61 73 68  llHash % m_nHash
15f0: 54 61 62 6c 65 53 69 7a 65 5d 2c 20 6b 65 79 29  TableSize], key)
1600: 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 75 72 6e  ;....}....return
1610: 20 70 41 73 73 6f 63 2d 3e 76 61 6c 75 65 3b 20   pAssoc->value; 
1620: 20 2f 2f 20 72 65 74 75 72 6e 20 6e 65 77 20 72   // return new r
1630: 65 66 65 72 65 6e 63 65 0d 0a 09 7d 0d 0a 09 76  eference...}...v
1640: 6f 69 64 20 53 65 74 41 74 28 6b 65 79 73 72 63  oid SetAt(keysrc
1650: 5f 74 79 70 65 20 6b 65 79 2c 20 76 61 6c 75 65  _type key, value
1660: 61 72 67 5f 74 79 70 65 20 6e 65 77 56 61 6c 75  arg_type newValu
1670: 65 29 7b 28 2a 74 68 69 73 29 5b 6b 65 79 5d 3d  e){(*this)[key]=
1680: 6e 65 77 56 61 6c 75 65 3b 7d 0d 0a 0d 0a 09 2f  newValue;}...../
1690: 2f 20 cf ee e7 e2 ee eb ff e5 f2 20 e2 f1 f2 e0  / ......... ....
16a0: e2 e8 f2 fc 20 e7 ed e0 f7 e5 ed e8 e5 20 e8 20  .... ........ . 
16b0: e2 ee e7 e2 f0 e0 f9 e0 e5 f2 20 54 52 55 45 2c  .......... TRUE,
16c0: 20 e5 f1 eb e8 20 f2 e0 ea ee e9 20 ea eb fe f7   .... ..... ....
16d0: 20 f3 e6 e5 20 f1 f3 f9 e5 f1 f2 e2 ee e2 e0 eb   ... ...........
16e0: 2c 0d 0a 09 2f 2f 20 e8 20 46 41 4c 53 45 2c 20  ,...// . FALSE, 
16f0: e5 f1 eb e8 20 f2 e0 ea ee e3 ee 20 ea eb fe f7  .... ...... ....
1700: e0 20 ed e5 20 e1 fb eb ee 0d 0a 09 42 4f 4f 4c  . .. .......BOOL
1710: 20 49 6e 73 65 72 74 45 78 69 73 74 28 6b 65 79   InsertExist(key
1720: 73 72 63 5f 74 79 70 65 20 6b 65 79 2c 20 76 61  src_type key, va
1730: 6c 75 65 61 72 67 5f 74 79 70 65 20 6e 65 77 56  luearg_type newV
1740: 61 6c 75 65 2c 20 42 4f 4f 4c 20 62 52 65 70 6c  alue, BOOL bRepl
1750: 61 63 65 3d 46 41 4c 53 45 29 0d 0a 09 7b 0d 0a  ace=FALSE)...{..
1760: 09 09 44 57 4f 52 44 20 6e 46 75 6c 6c 48 61 73  ..DWORD nFullHas
1770: 68 3b 0d 0a 09 09 61 73 73 6f 63 2a 20 70 41 73  h;....assoc* pAs
1780: 73 6f 63 3b 0d 0a 09 09 42 4f 4f 4c 20 62 52 65  soc;....BOOL bRe
1790: 74 3b 0d 0a 09 09 69 66 28 70 41 73 73 6f 63 20  t;....if(pAssoc 
17a0: 3d 20 47 65 74 41 73 73 6f 63 41 74 28 6b 65 79  = GetAssocAt(key
17b0: 2c 20 6e 46 75 6c 6c 48 61 73 68 29 29 0d 0a 09  , nFullHash))...
17c0: 09 7b 0d 0a 09 09 09 69 66 28 21 62 52 65 70 6c  .{.....if(!bRepl
17d0: 61 63 65 29 0d 0a 09 09 09 09 72 65 74 75 72 6e  ace)......return
17e0: 20 54 52 55 45 3b 0d 0a 09 09 09 62 52 65 74 3d   TRUE;.....bRet=
17f0: 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c  TRUE;....}....el
1800: 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 62 52 65 74  se....{.....bRet
1810: 3d 46 41 4c 53 45 3b 0d 0a 09 09 09 69 66 28 21  =FALSE;.....if(!
1820: 6d 5f 70 48 61 73 68 54 61 62 6c 65 20 7c 7c 20  m_pHashTable || 
1830: 6d 5f 6e 43 6f 75 6e 74 20 3e 3d 20 6d 5f 6e 48  m_nCount >= m_nH
1840: 61 73 68 54 61 62 6c 65 53 69 7a 65 20 2f 20 33  ashTableSize / 3
1850: 20 2a 20 32 29 0d 0a 09 09 09 09 50 72 65 70 65   * 2)......Prepe
1860: 61 72 65 48 61 73 68 54 61 62 6c 65 28 6d 5f 6e  areHashTable(m_n
1870: 43 6f 75 6e 74 2b 31 29 3b 0d 0a 09 09 09 70 41  Count+1);.....pA
1880: 73 73 6f 63 20 3d 20 73 74 61 74 69 63 5f 63 61  ssoc = static_ca
1890: 73 74 3c 61 73 73 6f 63 2a 3e 28 4e 65 77 41 73  st<assoc*>(NewAs
18a0: 73 6f 63 28 73 69 7a 65 6f 66 28 61 73 73 6f 63  soc(sizeof(assoc
18b0: 29 29 29 3b 0d 0a 09 09 09 70 41 73 73 6f 63 2d  )));.....pAssoc-
18c0: 3e 61 73 73 6f 63 3a 3a 61 73 73 6f 63 28 6e 46  >assoc::assoc(nF
18d0: 75 6c 6c 48 61 73 68 2c 20 6d 5f 70 48 61 73 68  ullHash, m_pHash
18e0: 54 61 62 6c 65 5b 6e 46 75 6c 6c 48 61 73 68 20  Table[nFullHash 
18f0: 25 20 6d 5f 6e 48 61 73 68 54 61 62 6c 65 53 69  % m_nHashTableSi
1900: 7a 65 5d 2c 20 6b 65 79 29 3b 0d 0a 09 09 7d 0d  ze], key);....}.
1910: 0a 09 09 70 41 73 73 6f 63 2d 3e 76 61 6c 75 65  ...pAssoc->value
1920: 3d 6e 65 77 56 61 6c 75 65 3b 0d 0a 09 09 72 65  =newValue;....re
1930: 74 75 72 6e 20 62 52 65 74 3b 0d 0a 09 7d 0d 0a  turn bRet;...}..
1940: 0d 0a 09 42 4f 4f 4c 20 52 65 6d 6f 76 65 4b 65  ...BOOL RemoveKe
1950: 79 28 4c 50 43 53 54 52 20 6b 65 79 29 0d 0a 09  y(LPCSTR key)...
1960: 7b 0d 0a 09 09 69 66 28 21 6d 5f 70 48 61 73 68  {....if(!m_pHash
1970: 54 61 62 6c 65 20 7c 7c 20 21 6d 5f 6e 43 6f 75  Table || !m_nCou
1980: 6e 74 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 46  nt).....return F
1990: 41 4c 53 45 3b 0d 0a 09 09 44 57 4f 52 44 20 6e  ALSE;....DWORD n
19a0: 46 75 6c 6c 48 61 73 68 20 3d 20 47 65 74 48 61  FullHash = GetHa
19b0: 73 68 28 6b 65 79 29 3b 0d 0a 09 09 43 41 73 73  sh(key);....CAss
19c0: 6f 63 2a 2a 20 70 70 41 73 73 6f 63 50 72 65 76  oc** ppAssocPrev
19d0: 20 3d 20 26 6d 5f 70 48 61 73 68 54 61 62 6c 65   = &m_pHashTable
19e0: 5b 6e 46 75 6c 6c 48 61 73 68 20 25 20 6d 5f 6e  [nFullHash % m_n
19f0: 48 61 73 68 54 61 62 6c 65 53 69 7a 65 5d 3b 0d  HashTableSize];.
1a00: 0a 0d 0a 09 09 61 73 73 6f 63 2a 20 70 41 73 73  .....assoc* pAss
1a10: 6f 63 3b 0d 0a 09 09 66 6f 72 28 70 41 73 73 6f  oc;....for(pAsso
1a20: 63 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c  c = static_cast<
1a30: 61 73 73 6f 63 2a 3e 28 2a 70 70 41 73 73 6f 63  assoc*>(*ppAssoc
1a40: 50 72 65 76 29 3b 20 70 41 73 73 6f 63 20 3b 20  Prev); pAssoc ; 
1a50: 70 41 73 73 6f 63 20 3d 20 73 74 61 74 69 63 5f  pAssoc = static_
1a60: 63 61 73 74 3c 61 73 73 6f 63 2a 3e 28 70 41 73  cast<assoc*>(pAs
1a70: 73 6f 63 2d 3e 70 4e 65 78 74 29 29 0d 0a 09 09  soc->pNext))....
1a80: 7b 0d 0a 09 09 09 69 66 28 70 41 73 73 6f 63 2d  {.....if(pAssoc-
1a90: 3e 6e 48 61 73 68 56 61 6c 75 65 20 3d 3d 20 6e  >nHashValue == n
1aa0: 46 75 6c 6c 48 61 73 68 20 26 26 20 49 73 53 74  FullHash && IsSt
1ab0: 72 45 71 75 61 6c 28 70 41 73 73 6f 63 2d 3e 6b  rEqual(pAssoc->k
1ac0: 65 79 2c 20 6b 65 79 29 29 0d 0a 09 09 09 7b 0d  ey, key)).....{.
1ad0: 0a 09 09 09 09 2a 70 70 41 73 73 6f 63 50 72 65  .....*ppAssocPre
1ae0: 76 20 3d 20 70 41 73 73 6f 63 2d 3e 70 4e 65 78  v = pAssoc->pNex
1af0: 74 3b 0d 0a 09 09 09 09 70 41 73 73 6f 63 2d 3e  t;......pAssoc->
1b00: 7e 61 73 73 6f 63 28 29 3b 0d 0a 09 09 09 09 46  ~assoc();......F
1b10: 72 65 65 41 73 73 6f 63 28 70 41 73 73 6f 63 29  reeAssoc(pAssoc)
1b20: 3b 0d 0a 09 09 09 09 69 66 28 6d 5f 6e 43 6f 75  ;......if(m_nCou
1b30: 6e 74 20 3c 20 6d 5f 6e 48 61 73 68 54 61 62 6c  nt < m_nHashTabl
1b40: 65 53 69 7a 65 2f 32 29 0d 0a 09 09 09 09 09 50  eSize/2).......P
1b50: 72 65 70 65 61 72 65 48 61 73 68 54 61 62 6c 65  repeareHashTable
1b60: 28 6d 5f 6e 43 6f 75 6e 74 29 3b 0d 0a 09 09 09  (m_nCount);.....
1b70: 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09  .return TRUE;...
1b80: 09 09 7d 0d 0a 09 09 09 70 70 41 73 73 6f 63 50  ..}.....ppAssocP
1b90: 72 65 76 20 3d 20 26 70 41 73 73 6f 63 2d 3e 70  rev = &pAssoc->p
1ba0: 4e 65 78 74 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65  Next;....}....re
1bb0: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d  turn FALSE;...}.
1bc0: 0a 09 0d 0a 09 42 4f 4f 4c 20 52 65 6d 6f 76 65  .....BOOL Remove
1bd0: 50 61 69 72 28 4c 50 43 53 54 52 20 6b 65 79 2c  Pair(LPCSTR key,
1be0: 20 76 61 6c 75 65 61 72 67 5f 74 79 70 65 20 76   valuearg_type v
1bf0: 61 6c 75 65 29 0d 0a 09 7b 0d 0a 09 09 69 66 28  alue)...{....if(
1c00: 21 6d 5f 70 48 61 73 68 54 61 62 6c 65 20 7c 7c  !m_pHashTable ||
1c10: 20 21 6d 5f 6e 43 6f 75 6e 74 29 0d 0a 09 09 09   !m_nCount).....
1c20: 72 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09  return FALSE;...
1c30: 09 44 57 4f 52 44 20 6e 46 75 6c 6c 48 61 73 68  .DWORD nFullHash
1c40: 20 3d 20 47 65 74 48 61 73 68 28 6b 65 79 29 3b   = GetHash(key);
1c50: 0d 0a 09 09 43 41 73 73 6f 63 2a 2a 20 70 70 41  ....CAssoc** ppA
1c60: 73 73 6f 63 50 72 65 76 20 3d 20 26 6d 5f 70 48  ssocPrev = &m_pH
1c70: 61 73 68 54 61 62 6c 65 5b 6e 46 75 6c 6c 48 61  ashTable[nFullHa
1c80: 73 68 20 25 20 6d 5f 6e 48 61 73 68 54 61 62 6c  sh % m_nHashTabl
1c90: 65 53 69 7a 65 5d 3b 0d 0a 0d 0a 09 09 61 73 73  eSize];......ass
1ca0: 6f 63 2a 20 70 41 73 73 6f 63 3b 0d 0a 09 09 66  oc* pAssoc;....f
1cb0: 6f 72 28 70 41 73 73 6f 63 20 3d 20 73 74 61 74  or(pAssoc = stat
1cc0: 69 63 5f 63 61 73 74 3c 61 73 73 6f 63 2a 3e 28  ic_cast<assoc*>(
1cd0: 2a 70 70 41 73 73 6f 63 50 72 65 76 29 3b 20 70  *ppAssocPrev); p
1ce0: 41 73 73 6f 63 20 3b 20 70 41 73 73 6f 63 20 3d  Assoc ; pAssoc =
1cf0: 20 73 74 61 74 69 63 5f 63 61 73 74 3c 61 73 73   static_cast<ass
1d00: 6f 63 2a 3e 28 70 41 73 73 6f 63 2d 3e 70 4e 65  oc*>(pAssoc->pNe
1d10: 78 74 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66  xt))....{.....if
1d20: 28 70 41 73 73 6f 63 2d 3e 6e 48 61 73 68 56 61  (pAssoc->nHashVa
1d30: 6c 75 65 20 3d 3d 20 6e 46 75 6c 6c 48 61 73 68  lue == nFullHash
1d40: 20 26 26 20 49 73 53 74 72 45 71 75 61 6c 28 70   && IsStrEqual(p
1d50: 41 73 73 6f 63 2d 3e 6b 65 79 2c 20 6b 65 79 29  Assoc->key, key)
1d60: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28  ).....{......if(
1d70: 70 41 73 73 6f 63 2d 3e 76 61 6c 75 65 20 3d 3d  pAssoc->value ==
1d80: 20 76 61 6c 75 65 29 0d 0a 09 09 09 09 7b 0d 0a   value)......{..
1d90: 09 09 09 09 09 2a 70 70 41 73 73 6f 63 50 72 65  .....*ppAssocPre
1da0: 76 20 3d 20 70 41 73 73 6f 63 2d 3e 70 4e 65 78  v = pAssoc->pNex
1db0: 74 3b 0d 0a 09 09 09 09 09 70 41 73 73 6f 63 2d  t;.......pAssoc-
1dc0: 3e 7e 61 73 73 6f 63 28 29 3b 0d 0a 09 09 09 09  >~assoc();......
1dd0: 09 46 72 65 65 41 73 73 6f 63 28 70 41 73 73 6f  .FreeAssoc(pAsso
1de0: 63 29 3b 0d 0a 09 09 09 09 09 69 66 28 6d 5f 6e  c);.......if(m_n
1df0: 43 6f 75 6e 74 20 3c 20 6d 5f 6e 48 61 73 68 54  Count < m_nHashT
1e00: 61 62 6c 65 53 69 7a 65 2f 32 29 0d 0a 09 09 09  ableSize/2).....
1e10: 09 09 09 50 72 65 70 65 61 72 65 48 61 73 68 54  ...PrepeareHashT
1e20: 61 62 6c 65 28 6d 5f 6e 43 6f 75 6e 74 29 3b 0d  able(m_nCount);.
1e30: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 54 52 55  ......return TRU
1e40: 45 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 72  E;......}......r
1e50: 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09  eturn FALSE;....
1e60: 09 7d 0d 0a 09 09 09 70 70 41 73 73 6f 63 50 72  .}.....ppAssocPr
1e70: 65 76 20 3d 20 26 70 41 73 73 6f 63 2d 3e 70 4e  ev = &pAssoc->pN
1e80: 65 78 74 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 74  ext;....}....ret
1e90: 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a  urn FALSE;...}..
1ea0: 09 0d 0a 09 76 6f 69 64 20 52 65 6d 6f 76 65 41  ....void RemoveA
1eb0: 6c 6c 28 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 44  ll()...{....if(D
1ec0: 57 4f 52 44 20 63 6f 75 6e 74 3d 6d 5f 6e 43 6f  WORD count=m_nCo
1ed0: 75 6e 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 61 73  unt)....{.....as
1ee0: 73 6f 63 20 2a 2a 70 70 41 73 73 6f 63 3d 72 65  soc **ppAssoc=re
1ef0: 69 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 61  interpret_cast<a
1f00: 73 73 6f 63 2a 2a 3e 28 6d 5f 70 48 61 73 68 54  ssoc**>(m_pHashT
1f10: 61 62 6c 65 29 2c 20 2a 70 41 73 73 6f 63 3d 2a  able), *pAssoc=*
1f20: 70 70 41 73 73 6f 63 3b 0d 0a 09 09 09 77 68 69  ppAssoc;.....whi
1f30: 6c 65 28 21 70 41 73 73 6f 63 29 0d 0a 09 09 09  le(!pAssoc).....
1f40: 09 70 41 73 73 6f 63 3d 2a 2b 2b 70 70 41 73 73  .pAssoc=*++ppAss
1f50: 6f 63 3b 0d 0a 09 09 09 66 6f 72 28 3b 3b 29 0d  oc;.....for(;;).
1f60: 0a 09 09 09 7b 0d 0a 09 09 09 09 61 73 73 6f 63  ....{......assoc
1f70: 2a 20 70 4e 65 78 74 3d 73 74 61 74 69 63 5f 63  * pNext=static_c
1f80: 61 73 74 3c 61 73 73 6f 63 2a 3e 28 70 41 73 73  ast<assoc*>(pAss
1f90: 6f 63 2d 3e 70 4e 65 78 74 29 3b 0d 0a 09 09 09  oc->pNext);.....
1fa0: 09 70 41 73 73 6f 63 2d 3e 7e 61 73 73 6f 63 28  .pAssoc->~assoc(
1fb0: 29 3b 0d 0a 09 09 09 09 69 66 28 21 2d 2d 63 6f  );......if(!--co
1fc0: 75 6e 74 29 0d 0a 09 09 09 09 09 62 72 65 61 6b  unt).......break
1fd0: 3b 0d 0a 09 09 09 09 77 68 69 6c 65 28 21 70 4e  ;......while(!pN
1fe0: 65 78 74 29 0d 0a 09 09 09 09 09 70 4e 65 78 74  ext).......pNext
1ff0: 3d 2a 2b 2b 70 70 41 73 73 6f 63 3b 0d 0a 09 09  =*++ppAssoc;....
2000: 09 09 70 41 73 73 6f 63 3d 70 4e 65 78 74 3b 0d  ..pAssoc=pNext;.
2010: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 44 65  ....}....}....De
2020: 6c 65 74 65 41 6c 6c 28 29 3b 0d 0a 09 7d 0d 0a  leteAll();...}..
2030: 0d 0a 09 76 6f 69 64 20 47 65 74 4e 65 78 74 41  ...void GetNextA
2040: 73 73 6f 63 28 50 4f 53 49 54 49 4f 4e 26 20 72  ssoc(POSITION& r
2050: 4e 65 78 74 50 6f 73 69 74 69 6f 6e 2c 20 6b 65  NextPosition, ke
2060: 79 64 73 74 5f 74 79 70 65 26 20 72 4b 65 79 2c  ydst_type& rKey,
2070: 20 76 61 6c 75 65 5f 74 79 70 65 26 20 72 56 61   value_type& rVa
2080: 6c 75 65 29 20 63 6f 6e 73 74 0d 0a 09 7b 0d 0a  lue) const...{..
2090: 09 09 61 73 73 6f 63 2a 20 70 41 73 73 6f 63 52  ..assoc* pAssocR
20a0: 65 74 20 3d 20 72 65 69 6e 74 65 72 70 72 65 74  et = reinterpret
20b0: 5f 63 61 73 74 3c 61 73 73 6f 63 2a 3e 28 72 4e  _cast<assoc*>(rN
20c0: 65 78 74 50 6f 73 69 74 69 6f 6e 29 3b 0d 0a 09  extPosition);...
20d0: 09 69 66 28 70 41 73 73 6f 63 52 65 74 20 3d 3d  .if(pAssocRet ==
20e0: 20 72 65 69 6e 74 65 72 70 72 65 74 5f 63 61 73   reinterpret_cas
20f0: 74 3c 61 73 73 6f 63 2a 3e 28 42 45 46 4f 52 45  t<assoc*>(BEFORE
2100: 5f 53 54 41 52 54 5f 50 4f 53 49 54 49 4f 4e 29  _START_POSITION)
2110: 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 41 73 73 6f  )....{.....CAsso
2120: 63 2a 2a 20 70 70 41 73 73 6f 63 3d 6d 5f 70 48  c** ppAssoc=m_pH
2130: 61 73 68 54 61 62 6c 65 3b 0d 0a 09 09 09 77 68  ashTable;.....wh
2140: 69 6c 65 28 21 28 70 41 73 73 6f 63 52 65 74 3d  ile(!(pAssocRet=
2150: 73 74 61 74 69 63 5f 63 61 73 74 3c 61 73 73 6f  static_cast<asso
2160: 63 2a 3e 28 2a 70 70 41 73 73 6f 63 2b 2b 29 29  c*>(*ppAssoc++))
2170: 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 43 41 73  );....}......CAs
2180: 73 6f 63 2a 20 70 41 73 73 6f 63 4e 65 78 74 3d  soc* pAssocNext=
2190: 70 41 73 73 6f 63 52 65 74 2d 3e 70 4e 65 78 74  pAssocRet->pNext
21a0: 3b 0d 0a 09 09 69 66 28 21 70 41 73 73 6f 63 4e  ;....if(!pAssocN
21b0: 65 78 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 6f  ext)....{.....fo
21c0: 72 28 44 57 4f 52 44 20 69 64 78 20 3d 20 70 41  r(DWORD idx = pA
21d0: 73 73 6f 63 52 65 74 2d 3e 6e 48 61 73 68 56 61  ssocRet->nHashVa
21e0: 6c 75 65 20 25 20 6d 5f 6e 48 61 73 68 54 61 62  lue % m_nHashTab
21f0: 6c 65 53 69 7a 65 20 2b 20 31 3b 0d 0a 09 09 09  leSize + 1;.....
2200: 09 69 64 78 20 3c 20 6d 5f 6e 48 61 73 68 54 61  .idx < m_nHashTa
2210: 62 6c 65 53 69 7a 65 3b 20 2b 2b 69 64 78 29 0d  bleSize; ++idx).
2220: 0a 09 09 09 09 69 66 28 70 41 73 73 6f 63 4e 65  .....if(pAssocNe
2230: 78 74 20 3d 20 6d 5f 70 48 61 73 68 54 61 62 6c  xt = m_pHashTabl
2240: 65 5b 69 64 78 5d 29 0d 0a 09 09 09 09 09 62 72  e[idx]).......br
2250: 65 61 6b 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 72  eak;....}......r
2260: 4e 65 78 74 50 6f 73 69 74 69 6f 6e 20 3d 20 72  NextPosition = r
2270: 65 69 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c  einterpret_cast<
2280: 50 4f 53 49 54 49 4f 4e 3e 28 70 41 73 73 6f 63  POSITION>(pAssoc
2290: 4e 65 78 74 29 3b 0d 0a 09 09 2f 2f 20 66 69 6c  Next);....// fil
22a0: 6c 20 69 6e 20 72 65 74 75 72 6e 20 64 61 74 61  l in return data
22b0: 0d 0a 09 09 72 4b 65 79 20 3d 20 70 41 73 73 6f  ....rKey = pAsso
22c0: 63 52 65 74 2d 3e 6b 65 79 3b 0d 0a 09 09 72 56  cRet->key;....rV
22d0: 61 6c 75 65 20 3d 20 70 41 73 73 6f 63 52 65 74  alue = pAssocRet
22e0: 2d 3e 76 61 6c 75 65 3b 0d 0a 09 7d 0d 0a 09 74  ->value;...}...t
22f0: 65 6d 70 6c 61 74 65 3c 74 79 70 65 6e 61 6d 65  emplate<typename
2300: 20 4f 70 3e 0d 0a 09 76 6f 69 64 20 46 6f 72 45   Op>...void ForE
2310: 61 63 68 56 61 6c 75 65 28 4f 70 20 6f 70 29 0d  achValue(Op op).
2320: 0a 09 7b 0d 0a 09 09 69 66 28 44 57 4f 52 44 20  ..{....if(DWORD 
2330: 63 6f 75 6e 74 3d 6d 5f 6e 43 6f 75 6e 74 29 0d  count=m_nCount).
2340: 0a 09 09 7b 0d 0a 09 09 09 61 73 73 6f 63 20 2a  ...{.....assoc *
2350: 2a 70 70 41 73 73 6f 63 3d 72 65 69 6e 74 65 72  *ppAssoc=reinter
2360: 70 72 65 74 5f 63 61 73 74 3c 61 73 73 6f 63 2a  pret_cast<assoc*
2370: 2a 3e 28 6d 5f 70 48 61 73 68 54 61 62 6c 65 29  *>(m_pHashTable)
2380: 2c 20 2a 70 41 73 73 6f 63 3d 2a 70 70 41 73 73  , *pAssoc=*ppAss
2390: 6f 63 3b 0d 0a 09 09 09 77 68 69 6c 65 28 21 70  oc;.....while(!p
23a0: 41 73 73 6f 63 29 0d 0a 09 09 09 09 70 41 73 73  Assoc)......pAss
23b0: 6f 63 3d 2a 2b 2b 70 70 41 73 73 6f 63 3b 0d 0a  oc=*++ppAssoc;..
23c0: 09 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 7b  ...for(;;).....{
23d0: 0d 0a 09 09 09 09 61 73 73 6f 63 2a 20 70 4e 65  ......assoc* pNe
23e0: 78 74 3d 73 74 61 74 69 63 5f 63 61 73 74 3c 61  xt=static_cast<a
23f0: 73 73 6f 63 2a 3e 28 70 41 73 73 6f 63 2d 3e 70  ssoc*>(pAssoc->p
2400: 4e 65 78 74 29 3b 0d 0a 09 09 09 09 6f 70 28 70  Next);......op(p
2410: 41 73 73 6f 63 2d 3e 76 61 6c 75 65 29 3b 0d 0a  Assoc->value);..
2420: 09 09 09 09 69 66 28 21 2d 2d 63 6f 75 6e 74 29  ....if(!--count)
2430: 0d 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09  .......break;...
2440: 09 09 09 77 68 69 6c 65 28 21 70 4e 65 78 74 29  ...while(!pNext)
2450: 0d 0a 09 09 09 09 09 70 4e 65 78 74 3d 2a 2b 2b  .......pNext=*++
2460: 70 70 41 73 73 6f 63 3b 0d 0a 09 09 09 09 70 41  ppAssoc;......pA
2470: 73 73 6f 63 3d 70 4e 65 78 74 3b 0d 0a 09 09 09  ssoc=pNext;.....
2480: 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 0d 0a 09  }....}...}......
2490: 74 65 6d 70 6c 61 74 65 3c 74 79 70 65 6e 61 6d  template<typenam
24a0: 65 20 4f 70 3e 0d 0a 09 76 6f 69 64 20 46 6f 72  e Op>...void For
24b0: 45 61 63 68 50 61 69 72 28 4f 70 20 6f 70 29 0d  EachPair(Op op).
24c0: 0a 09 7b 0d 0a 09 09 69 66 28 44 57 4f 52 44 20  ..{....if(DWORD 
24d0: 63 6f 75 6e 74 3d 6d 5f 6e 43 6f 75 6e 74 29 0d  count=m_nCount).
24e0: 0a 09 09 7b 0d 0a 09 09 09 61 73 73 6f 63 20 2a  ...{.....assoc *
24f0: 2a 70 70 41 73 73 6f 63 3d 72 65 69 6e 74 65 72  *ppAssoc=reinter
2500: 70 72 65 74 5f 63 61 73 74 3c 61 73 73 6f 63 2a  pret_cast<assoc*
2510: 2a 3e 28 6d 5f 70 48 61 73 68 54 61 62 6c 65 29  *>(m_pHashTable)
2520: 2c 20 2a 70 41 73 73 6f 63 3d 2a 70 70 41 73 73  , *pAssoc=*ppAss
2530: 6f 63 3b 0d 0a 09 09 09 77 68 69 6c 65 28 21 70  oc;.....while(!p
2540: 41 73 73 6f 63 29 0d 0a 09 09 09 09 70 41 73 73  Assoc)......pAss
2550: 6f 63 3d 2a 2b 2b 70 70 41 73 73 6f 63 3b 0d 0a  oc=*++ppAssoc;..
2560: 09 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 7b  ...for(;;).....{
2570: 0d 0a 09 09 09 09 61 73 73 6f 63 2a 20 70 4e 65  ......assoc* pNe
2580: 78 74 3d 73 74 61 74 69 63 5f 63 61 73 74 3c 61  xt=static_cast<a
2590: 73 73 6f 63 2a 3e 28 70 41 73 73 6f 63 2d 3e 70  ssoc*>(pAssoc->p
25a0: 4e 65 78 74 29 3b 0d 0a 09 09 09 09 6f 70 28 70  Next);......op(p
25b0: 41 73 73 6f 63 2d 3e 6b 65 79 2c 20 70 41 73 73  Assoc->key, pAss
25c0: 6f 63 2d 3e 76 61 6c 75 65 29 3b 0d 0a 09 09 09  oc->value);.....
25d0: 09 69 66 28 21 2d 2d 63 6f 75 6e 74 29 0d 0a 09  .if(!--count)...
25e0: 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09  ....break;......
25f0: 77 68 69 6c 65 28 21 70 4e 65 78 74 29 0d 0a 09  while(!pNext)...
2600: 09 09 09 09 70 4e 65 78 74 3d 2a 2b 2b 70 70 41  ....pNext=*++ppA
2610: 73 73 6f 63 3b 0d 0a 09 09 09 09 70 41 73 73 6f  ssoc;......pAsso
2620: 63 3d 70 4e 65 78 74 3b 0d 0a 09 09 09 7d 0d 0a  c=pNext;.....}..
2630: 09 09 7d 0d 0a 09 7d 0d 0a 70 72 6f 74 65 63 74  ..}...}..protect
2640: 65 64 3a 0d 0a 09 2f 2f 20 41 73 73 6f 63 69 61  ed:...// Associa
2650: 74 69 6f 6e 0d 0a 09 73 74 72 75 63 74 20 61 73  tion...struct as
2660: 73 6f 63 20 3a 20 43 4e 6f 43 61 73 65 4d 61 70  soc : CNoCaseMap
2670: 42 61 73 65 3a 3a 43 41 73 73 6f 63 0d 0a 09 7b  Base::CAssoc...{
2680: 0d 0a 09 09 61 73 73 6f 63 28 44 57 4f 52 44 20  ....assoc(DWORD 
2690: 6e 48 61 73 68 2c 20 43 41 73 73 6f 63 2a 26 20  nHash, CAssoc*& 
26a0: 70 48 61 73 68 54 2c 20 6b 65 79 73 72 63 5f 74  pHashT, keysrc_t
26b0: 79 70 65 20 6b 29 3a 43 41 73 73 6f 63 28 6e 48  ype k):CAssoc(nH
26c0: 61 73 68 2c 20 70 48 61 73 68 54 29 2c 20 6b 65  ash, pHashT), ke
26d0: 79 28 6b 29 7b 7d 0d 0a 09 09 6b 65 79 5f 74 79  y(k){}....key_ty
26e0: 70 65 20 6b 65 79 3b 0d 0a 09 09 76 61 6c 75 65  pe key;....value
26f0: 5f 74 79 70 65 20 76 61 6c 75 65 3b 0d 0a 09 7d  _type value;...}
2700: 3b 0d 0a 09 0d 0a 09 61 73 73 6f 63 2a 20 47 65  ;......assoc* Ge
2710: 74 41 73 73 6f 63 41 74 28 4c 50 43 53 54 52 20  tAssocAt(LPCSTR 
2720: 6b 65 79 2c 20 44 57 4f 52 44 26 20 6e 46 75 6c  key, DWORD& nFul
2730: 6c 48 61 73 68 29 20 63 6f 6e 73 74 0d 0a 09 7b  lHash) const...{
2740: 0d 0a 09 09 6e 46 75 6c 6c 48 61 73 68 20 3d 20  ....nFullHash = 
2750: 47 65 74 48 61 73 68 28 6b 65 79 29 3b 0d 0a 09  GetHash(key);...
2760: 0d 0a 09 09 69 66 28 21 6d 5f 70 48 61 73 68 54  ....if(!m_pHashT
2770: 61 62 6c 65 29 0d 0a 09 09 09 72 65 74 75 72 6e  able).....return
2780: 20 4e 55 4c 4c 3b 0d 0a 0d 0a 09 09 2f 2f 20 73   NULL;......// s
2790: 65 65 20 69 66 20 69 74 20 65 78 69 73 74 73 0d  ee if it exists.
27a0: 0a 09 09 66 6f 72 28 43 41 73 73 6f 63 2a 20 70  ...for(CAssoc* p
27b0: 41 73 73 6f 63 20 3d 20 6d 5f 70 48 61 73 68 54  Assoc = m_pHashT
27c0: 61 62 6c 65 5b 6e 46 75 6c 6c 48 61 73 68 20 25  able[nFullHash %
27d0: 20 6d 5f 6e 48 61 73 68 54 61 62 6c 65 53 69 7a   m_nHashTableSiz
27e0: 65 5d 3b 20 70 41 73 73 6f 63 20 3b 20 70 41 73  e]; pAssoc ; pAs
27f0: 73 6f 63 20 3d 20 70 41 73 73 6f 63 2d 3e 70 4e  soc = pAssoc->pN
2800: 65 78 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66  ext)....{.....if
2810: 28 70 41 73 73 6f 63 2d 3e 6e 48 61 73 68 56 61  (pAssoc->nHashVa
2820: 6c 75 65 20 3d 3d 20 6e 46 75 6c 6c 48 61 73 68  lue == nFullHash
2830: 20 26 26 20 49 73 53 74 72 45 71 75 61 6c 28 73   && IsStrEqual(s
2840: 74 61 74 69 63 5f 63 61 73 74 3c 61 73 73 6f 63  tatic_cast<assoc
2850: 2a 3e 28 70 41 73 73 6f 63 29 2d 3e 6b 65 79 2c  *>(pAssoc)->key,
2860: 20 6b 65 79 29 29 0d 0a 09 09 09 09 72 65 74 75   key))......retu
2870: 72 6e 20 73 74 61 74 69 63 5f 63 61 73 74 3c 61  rn static_cast<a
2880: 73 73 6f 63 2a 3e 28 70 41 73 73 6f 63 29 3b 0d  ssoc*>(pAssoc);.
2890: 0a 09 09 7d 0d 0a 09 09 72 65 74 75 72 6e 20 4e  ...}....return N
28a0: 55 4c 4c 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a        ULL;...}..};..