Hex Artifact Content Вы: nobody
Вход

Artifact 2dfa71b19000414862a7ff5b5a713c288e4054f3:


0000: 2f 2f 20 6c 6f 6e 67 73 74 72 72 65 61 64 65 72  // longstrreader
0010: 2e 63 70 70 0d 0a 23 69 6e 63 6c 75 64 65 20 22  .cpp..#include "
0020: 53 74 64 41 66 78 2e 68 22 0d 0a 23 69 6e 63 6c  StdAfx.h"..#incl
0030: 75 64 65 20 22 6c 6f 6e 67 73 74 72 72 65 61 64  ude "longstrread
0040: 65 72 2e 68 22 0d 0a 0d 0a 73 74 72 75 63 74 20  er.h"....struct 
0050: 6b 65 79 20 3a 20 43 4b 65 79 4f 62 6a 0d 0a 7b  key : CKeyObj..{
0060: 0d 0a 09 6b 65 79 28 43 49 6e 64 65 78 20 2a 70  ...key(CIndex *p
0070: 49 29 20 3a 20 43 4b 65 79 4f 62 6a 28 70 49 2c  I) : CKeyObj(pI,
0080: 20 30 2c 20 30 29 7b 7d 0d 0a 09 76 69 72 74 75   0, 0){}...virtu
0090: 61 6c 20 76 6f 69 64 20 50 72 65 70 61 72 65 4b  al void PrepareK
00a0: 65 79 28 29 0d 0a 09 7b 0d 0a 09 09 6d 5f 70 53  ey()...{....m_pS
00b0: 74 6f 72 65 4f 62 6a 2d 3e 46 58 5f 53 74 72 69  toreObj->FX_Stri
00c0: 6e 67 28 30 2c 20 28 63 68 61 72 2a 29 70 46 69  ng(0, (char*)pFi
00d0: 65 6c 64 49 44 2c 20 34 2c 20 31 29 3b 0d 0a 09  eldID, 4, 1);...
00e0: 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d 3e 46 58  .m_pStoreObj->FX
00f0: 5f 53 74 72 69 6e 67 28 31 2c 20 28 63 68 61 72  _String(1, (char
0100: 2a 29 70 4f 62 6a 49 44 2c 20 39 2c 20 31 29 3b  *)pObjID, 9, 1);
0110: 0d 0a 09 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d  ....m_pStoreObj-
0120: 3e 46 58 5f 53 74 72 69 6e 67 28 32 2c 20 22 20  >FX_String(2, " 
0130: 20 20 30 22 2c 20 34 2c 20 31 29 3b 0d 0a 09 7d    0", 4, 1);...}
0140: 0d 0a 09 44 57 4f 52 44 2a 20 70 46 69 65 6c 64  ...DWORD* pField
0150: 49 44 3b 0d 0a 09 63 6f 6e 73 74 20 63 68 61 72  ID;...const char
0160: 2a 20 70 4f 62 6a 49 44 3b 0d 0a 7d 3b 0d 0a 0d  * pObjID;..};...
0170: 0a 0d 0a 76 6f 69 64 20 4c 6f 6e 67 53 74 72 52  ...void LongStrR
0180: 65 61 64 65 72 3a 3a 52 65 61 64 53 74 72 28 4c  eader::ReadStr(L
0190: 50 43 53 54 52 20 70 52 65 63 6f 72 64 42 75 66  PCSTR pRecordBuf
01a0: 65 72 2c 20 44 57 4f 52 44 20 6d 64 43 68 61 72  er, DWORD mdChar
01b0: 49 44 2c 20 43 53 74 72 69 6e 67 26 20 76 61 6c  ID, CString& val
01c0: 29 0d 0a 7b 0d 0a 09 6b 65 79 20 6b 28 73 74 6f  )..{...key k(sto
01d0: 72 65 2e 70 49 6e 64 65 78 29 3b 0d 0a 09 6b 2e  re.pIndex);...k.
01e0: 70 46 69 65 6c 64 49 44 20 3d 20 26 6d 64 43 68  pFieldID = &mdCh
01f0: 61 72 49 44 3b 0d 0a 09 6b 2e 70 4f 62 6a 49 44  arID;...k.pObjID
0200: 20 3d 20 70 52 65 63 6f 72 64 42 75 66 65 72 3b   = pRecordBufer;
0210: 0d 0a 09 69 66 28 73 74 6f 72 65 2e 47 6f 74 6f  ...if(store.Goto
0220: 28 26 6b 2c 20 63 63 45 2c 20 30 29 29 0d 0a 09  (&k, ccE, 0))...
0230: 7b 0d 0a 09 09 4c 50 43 53 54 52 20 70 74 72 20  {....LPCSTR ptr 
0240: 3d 20 70 52 65 61 64 42 75 66 20 2b 20 31 37 3b  = pReadBuf + 17;
0250: 0d 0a 09 09 44 57 4f 52 44 20 73 69 7a 65 20 3d  ....DWORD size =
0260: 20 30 3b 0d 0a 09 09 66 6f 72 28 3b 3b 29 0d 0a   0;....for(;;)..
0270: 09 09 7b 0d 0a 09 09 09 44 57 4f 52 44 20 73 20  ..{.....DWORD s 
0280: 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57  = static_cast<DW
0290: 4f 52 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74  ORD>(static_cast
02a0: 3c 42 59 54 45 3e 28 2a 70 74 72 2b 2b 29 29 3b  <BYTE>(*ptr++));
02b0: 0d 0a 09 09 09 69 66 28 73 20 3e 3d 20 27 30 27  .....if(s >= '0'
02c0: 20 26 26 20 73 20 3c 3d 20 27 39 27 29 0d 0a 09   && s <= '9')...
02d0: 09 09 09 73 69 7a 65 20 3d 20 73 69 7a 65 20 2a  ...size = size *
02e0: 20 31 36 20 2b 20 73 20 2d 20 27 30 27 3b 0d 0a   16 + s - '0';..
02f0: 09 09 09 65 6c 73 65 20 69 66 28 73 20 21 3d 20  ...else if(s != 
0300: 27 20 27 29 0d 0a 09 09 09 09 73 69 7a 65 20 3d  ' ')......size =
0310: 20 73 69 7a 65 20 2a 20 31 36 20 2b 20 73 20 2d   size * 16 + s -
0320: 27 61 27 20 2b 20 31 30 3b 0d 0a 09 09 09 65 6c  'a' + 10;.....el
0330: 73 65 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a  se......break;..
0340: 09 09 7d 0d 0a 09 09 4c 50 53 54 52 20 70 57 72  ..}....LPSTR pWr
0350: 69 74 65 20 3d 20 76 61 6c 2e 47 65 74 42 75 66  ite = val.GetBuf
0360: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 73 69 7a  ferSetLength(siz
0370: 65 29 3b 0d 0a 09 09 69 66 28 73 69 7a 65 20 3c  e);....if(size <
0380: 3d 20 37 31 29 0d 0a 09 09 09 6d 65 6d 63 70 79  = 71).....memcpy
0390: 28 70 57 72 69 74 65 2c 20 70 52 65 61 64 42 75  (pWrite, pReadBu
03a0: 66 20 2b 20 31 37 20 2b 20 39 2c 20 73 69 7a 65  f + 17 + 9, size
03b0: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d  );....else....{.
03c0: 0a 09 09 09 6d 65 6d 63 70 79 28 70 57 72 69 74  ....memcpy(pWrit
03d0: 65 2c 20 70 52 65 61 64 42 75 66 20 2b 20 31 37  e, pReadBuf + 17
03e0: 20 2b 20 39 2c 20 37 31 29 3b 0d 0a 09 09 09 70   + 9, 71);.....p
03f0: 57 72 69 74 65 20 2b 3d 20 37 31 3b 0d 0a 09 09  Write += 71;....
0400: 09 73 69 7a 65 20 2d 3d 20 37 31 3b 0d 0a 09 09  .size -= 71;....
0410: 09 70 74 72 20 3d 20 70 52 65 61 64 42 75 66 20  .ptr = pReadBuf 
0420: 2b 20 31 37 3b 0d 0a 09 09 09 64 6f 0d 0a 09 09  + 17;.....do....
0430: 09 7b 0d 0a 09 09 09 09 73 74 6f 72 65 2e 47 6f  .{......store.Go
0440: 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30 29 3b 0d  to(navNext, 0);.
0450: 0a 09 09 09 09 69 6e 74 20 63 6f 70 79 20 3d 20  .....int copy = 
0460: 73 69 7a 65 20 3c 20 38 30 20 3f 20 73 69 7a 65  size < 80 ? size
0470: 20 3a 20 38 30 3b 0d 0a 09 09 09 09 6d 65 6d 63   : 80;......memc
0480: 70 79 28 70 57 72 69 74 65 2c 20 70 74 72 2c 20  py(pWrite, ptr, 
0490: 63 6f 70 79 29 3b 0d 0a 09 09 09 09 70 57 72 69  copy);......pWri
04a0: 74 65 20 2b 3d 20 63 6f 70 79 3b 0d 0a 09 09 09  te += copy;.....
04b0: 09 73 69 7a 65 20 2d 3d 20 63 6f 70 79 3b 0d 0a  .size -= copy;..
04c0: 09 09 09 7d 77 68 69 6c 65 28 73 69 7a 65 29 3b  ...}while(size);
04d0: 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c 73 65  ....}...}...else
04e0: 0d 0a 09 09 76 61 6c 2e 45 6d 70 74 79 28 29 3b  ....val.Empty();
04f0: 0d 0a 7d 0d 0a                                   ..}..