Artifact
ed6aa5c3371f12e42882fa263e50d6eefcb0214c:
0000: 2f 2f 20 70 68 69 73 69 63 61 6c 69 6e 66 6f 2e // phisicalinfo.
0010: 68 0d 0a 23 70 72 61 67 6d 61 20 6f 6e 63 65 0d h..#pragma once.
0020: 0a 0d 0a 0d 0a 73 74 72 75 63 74 20 66 69 65 6c .....struct fiel
0030: 64 5f 69 6e 66 6f 0d 0a 7b 0d 0a 09 65 6e 75 6d d_info..{...enum
0040: 20 66 69 65 6c 64 5f 63 6d 70 5f 74 79 70 65 20 field_cmp_type
0050: 7b 66 74 54 65 78 74 2c 20 66 74 4e 75 6d 65 72 {ftText, ftNumer
0060: 69 63 7d 3b 0d 0a 0d 0a 09 66 69 65 6c 64 5f 63 ic};.....field_c
0070: 6d 70 5f 74 79 70 65 20 74 79 70 65 28 29 09 63 mp_type type().c
0080: 6f 6e 73 74 20 7b 20 72 65 74 75 72 6e 20 28 66 onst { return (f
0090: 69 65 6c 64 5f 63 6d 70 5f 74 79 70 65 29 74 3b ield_cmp_type)t;
00a0: 20 7d 0d 0a 09 44 57 4f 52 44 20 6c 65 6e 67 74 }...DWORD lengt
00b0: 68 28 29 09 09 09 63 6f 6e 73 74 20 7b 20 72 65 h()...const { re
00c0: 74 75 72 6e 20 6c 3b 20 7d 0d 0a 09 44 57 4f 52 turn l; }...DWOR
00d0: 44 20 70 72 65 63 65 73 73 69 6f 6e 28 29 09 09 D precession()..
00e0: 63 6f 6e 73 74 20 7b 20 72 65 74 75 72 6e 20 70 const { return p
00f0: 3b 20 7d 0d 0a 09 44 57 4f 52 44 20 6f 66 66 73 ; }...DWORD offs
0100: 65 74 49 6e 52 65 63 6f 72 64 28 29 09 63 6f 6e etInRecord().con
0110: 73 74 20 7b 20 72 65 74 75 72 6e 20 6f 3b 20 7d st { return o; }
0120: 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 09 66 ....private:...f
0130: 72 69 65 6e 64 20 73 74 72 75 63 74 20 70 68 69 riend struct phi
0140: 73 69 63 61 6c 5f 69 6e 66 6f 3b 0d 0a 09 44 57 sical_info;...DW
0150: 4f 52 44 20 6c 09 3a 20 31 30 3b 0d 0a 09 44 57 ORD l.: 10;...DW
0160: 4f 52 44 20 70 09 3a 20 34 3b 0d 0a 09 44 57 4f ORD p.: 4;...DWO
0170: 52 44 20 74 09 3a 20 32 3b 0d 0a 09 44 57 4f 52 RD t.: 2;...DWOR
0180: 44 20 6f 09 3a 20 31 36 3b 0d 0a 7d 3b 0d 0a 0d D o.: 16;..};...
0190: 0a 73 74 72 75 63 74 20 69 64 78 5f 66 69 65 6c .struct idx_fiel
01a0: 64 5f 69 6e 66 6f 0d 0a 7b 0d 0a 09 44 57 4f 52 d_info..{...DWOR
01b0: 44 20 6e 75 6d 49 6e 54 61 62 6c 65 28 29 20 63 D numInTable() c
01c0: 6f 6e 73 74 20 7b 72 65 74 75 72 6e 20 64 77 4e onst {return dwN
01d0: 75 6d 49 6e 54 61 62 6c 65 3b 7d 0d 0a 09 63 6f umInTable;}...co
01e0: 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 6f 26 20 nst field_info&
01f0: 69 6e 66 6f 28 29 20 63 6f 6e 73 74 20 7b 72 65 info() const {re
0200: 74 75 72 6e 20 66 49 6e 66 6f 3b 7d 0d 0a 70 72 turn fInfo;}..pr
0210: 69 76 61 74 65 3a 0d 0a 09 66 72 69 65 6e 64 20 ivate:...friend
0220: 73 74 72 75 63 74 20 70 68 69 73 69 63 61 6c 5f struct phisical_
0230: 69 6e 66 6f 3b 0d 0a 09 66 69 65 6c 64 5f 69 6e info;...field_in
0240: 66 6f 20 66 49 6e 66 6f 3b 0d 0a 09 44 57 4f 52 fo fInfo;...DWOR
0250: 44 20 64 77 4e 75 6d 49 6e 54 61 62 6c 65 3b 0d D dwNumInTable;.
0260: 0a 7d 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 69 6e .};....struct in
0270: 64 65 78 5f 69 6e 66 6f 0d 0a 7b 0d 0a 09 44 57 dex_info..{...DW
0280: 4f 52 44 20 66 69 65 6c 64 73 43 6f 75 6e 74 28 ORD fieldsCount(
0290: 29 09 09 63 6f 6e 73 74 20 7b 20 72 65 74 75 72 )..const { retur
02a0: 6e 20 63 3b 20 7d 0d 0a 09 44 57 4f 52 44 20 6b n c; }...DWORD k
02b0: 65 79 53 69 7a 65 28 29 09 09 09 63 6f 6e 73 74 eySize()...const
02c0: 20 7b 20 72 65 74 75 72 6e 20 73 3b 20 7d 0d 0a { return s; }..
02d0: 09 63 6f 6e 73 74 20 69 64 78 5f 66 69 65 6c 64 .const idx_field
02e0: 5f 69 6e 66 6f 2a 20 66 69 65 6c 64 73 28 29 20 _info* fields()
02f0: 63 6f 6e 73 74 20 7b 20 72 65 74 75 72 6e 20 66 const { return f
0300: 69 3b 7d 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d i;}....private:.
0310: 0a 09 66 72 69 65 6e 64 20 73 74 72 75 63 74 20 ..friend struct
0320: 70 68 69 73 69 63 61 6c 5f 69 6e 66 6f 3b 0d 0a phisical_info;..
0330: 09 44 57 4f 52 44 20 63 20 3a 20 31 36 3b 0d 0a .DWORD c : 16;..
0340: 09 44 57 4f 52 44 20 73 20 3a 20 31 36 3b 0d 0a .DWORD s : 16;..
0350: 09 69 64 78 5f 66 69 65 6c 64 5f 69 6e 66 6f 20 .idx_field_info
0360: 66 69 5b 31 5d 3b 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f fi[1];..};....//
0370: 20 d1 f2 f0 f3 ea f2 f3 f0 e0 20 ee ef e8 f1 fb ......... .....
0380: e2 e0 e5 f2 20 f4 e8 e7 e8 f7 e5 f1 ea f3 fe 20 .... ..........
0390: f1 f2 f0 f3 ea f2 f3 f0 f3 20 f2 e0 e1 eb e8 f6 ......... ......
03a0: fb 2e 0d 0a 2f 2f 20 ce ed e0 20 ef ee e7 e2 ee ....// ... .....
03b0: eb ff e5 f2 3a 0d 0a 2f 2f 20 2d 20 cf ee 20 ed ....:..// - .. .
03c0: ee ec e5 f0 f3 20 ef ee eb ff 20 f2 e0 e1 eb e8 ..... .... .....
03d0: f6 fb 20 ee ef f0 e5 e4 e5 eb e8 f2 fc 2c 20 e2 .. .........., .
03e0: 20 ea e0 ea e8 e5 20 e8 ed e4 e5 ea f1 fb 20 ee ..... ....... .
03f0: ed ee 20 e2 f5 ee e4 e8 f2 0d 0a 2f 2f 20 20 20 .. ........//
0400: e8 20 ef ee e7 e8 f6 e8 fe 20 fd f2 ee e3 ee 20 . ....... .....
0410: ef ee eb ff 20 e2 20 e8 ed e4 e5 ea f1 e5 2e 0d .... . .........
0420: 0a 2f 2f 20 2d 20 cf ee 20 ed ee ec e5 f0 f3 20 .// - .. ......
0430: e8 ed e4 e5 ea f1 e0 20 f2 e0 e1 eb e8 f6 fb 20 ....... .......
0440: ef e5 f0 e5 f7 e8 f1 eb e8 f2 fc 20 ed ee ec e5 ........... ....
0450: f0 e0 20 ef ee eb e5 e9 20 f2 e0 e1 eb e8 f6 fb .. ..... .......
0460: 2c 0d 0a 2f 2f 20 20 20 e2 f5 ee e4 ff f9 e8 f5 ,..// ........
0470: 20 e2 20 fd f2 ee f2 20 e8 ed e4 e5 ea f1 2e 0d . .... ........
0480: 0a 2f 2f 20 2d 20 cf ee eb f3 f7 e8 f2 fc 20 e0 .// - ........ .
0490: e4 f0 e5 f1 20 e1 f3 f4 e5 f0 e0 20 f7 f2 e5 ed .... ...... ....
04a0: e8 ff 20 f2 e0 e1 eb e8 f6 fb 2c 20 f0 e0 e7 ec .. ......., ....
04b0: e5 f0 20 e1 f3 f4 e5 f0 e0 2c 0d 0a 2f 2f 20 2d .. ......,..// -
04c0: 20 d1 ec e5 f9 e5 ed e8 e5 20 e8 20 e4 eb e8 ed ........ . ....
04d0: f3 20 ef ee eb e5 e9 20 e2 20 e1 f3 f4 e5 f0 e5 . ..... . ......
04e0: 2e 0d 0a 73 74 72 75 63 74 20 70 68 69 73 69 63 ...struct phisic
04f0: 61 6c 5f 69 6e 66 6f 0d 0a 7b 0d 0a 09 44 57 4f al_info..{...DWO
0500: 52 44 20 66 69 65 6c 64 73 43 6f 75 6e 74 28 29 RD fieldsCount()
0510: 09 09 09 09 63 6f 6e 73 74 20 7b 72 65 74 75 72 ....const {retur
0520: 6e 20 66 6c 64 43 6f 75 6e 74 3b 7d 0d 0a 09 44 n fldCount;}...D
0530: 57 4f 52 44 20 69 6e 64 65 78 65 73 43 6f 75 6e WORD indexesCoun
0540: 74 28 29 09 09 09 63 6f 6e 73 74 20 7b 72 65 74 t()...const {ret
0550: 75 72 6e 20 69 64 78 43 6f 75 6e 74 3b 7d 0d 0a urn idxCount;}..
0560: 09 63 6f 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 .const field_inf
0570: 6f 26 20 66 69 65 6c 64 28 44 57 4f 52 44 20 70 o& field(DWORD p
0580: 6f 73 29 09 63 6f 6e 73 74 20 7b 72 65 74 75 72 os).const {retur
0590: 6e 20 6d 5f 70 46 69 65 6c 64 73 5b 70 6f 73 5d n m_pFields[pos]
05a0: 3b 7d 0d 0a 09 63 6f 6e 73 74 20 69 6e 64 65 78 ;}...const index
05b0: 5f 69 6e 66 6f 2a 20 69 6e 64 65 78 28 44 57 4f _info* index(DWO
05c0: 52 44 20 70 6f 73 29 09 63 6f 6e 73 74 20 7b 72 RD pos).const {r
05d0: 65 74 75 72 6e 20 6d 5f 70 70 49 6e 64 65 78 65 eturn m_ppIndexe
05e0: 73 5b 70 6f 73 5d 3b 7d 0d 0a 09 2f 2f 20 cf ee s[pos];}...// ..
05f0: eb f3 f7 e8 f2 fc 20 e0 e4 f0 e5 f1 20 e1 f3 f4 ...... ..... ...
0600: e5 f0 e0 20 f2 e0 e1 eb e8 f6 fb 2c 20 e2 20 ea ... ......., . .
0610: ee f2 ee f0 fb e9 20 e4 e2 e8 e6 ee ea 20 31 d1 ...... ...... 1.
0620: 20 ef ee ec e5 f9 e0 e5 f2 0d 0a 09 2f 2f 20 e4 ...........// .
0630: e0 ed ed fb e5 20 e7 e0 ef e8 f1 e8 20 ef ee f1 ..... ...... ...
0640: eb e5 20 ef e5 f0 e5 ef ee e7 e8 f6 e8 ee ed e8 .. .............
0650: f0 ee e2 e0 ed e8 ff 20 e7 e0 ef e8 f1 e8 2e 0d ....... ........
0660: 0a 09 2f 2f 20 d2 e0 ea ee e9 20 e1 f3 f4 e5 f0 ..// ..... .....
0670: 20 d2 ce cb dc ca ce 20 ce c4 c8 cd 20 ed e0 20 ...... .... ..
0680: f2 e0 e1 eb e8 f6 f3 2c 20 f2 ee 20 e5 f1 f2 fc ......., .. ....
0690: 20 e5 f1 eb e8 20 e5 f1 f2 fc 20 e4 e2 e0 20 f7 .... .... ... .
06a0: e8 f2 e0 fe f9 e8 f5 0d 0a 09 2f 2f 20 43 53 74 ..........// CSt
06b0: 6f 72 65 4f 62 6a 2c 20 f2 ee 20 ef ee f1 eb e5 oreObj, .. .....
06c0: 20 ea e0 ea 20 e2 f2 ee f0 ee e9 20 f7 e8 f2 e0 ... ...... ....
06d0: f2 e5 eb fc 20 ef e5 f0 e5 ec e5 f1 f2 e8 f2 f1 .... ...........
06e0: ff 20 ed e0 20 e4 f0 f3 e3 f3 fe 20 e7 e0 ef e8 . .. ...... ....
06f0: f1 fc 2c 0d 0a 09 2f 2f 20 ef e5 f0 e2 fb e9 20 ..,...// ......
0700: e1 f3 e4 e5 f2 20 e2 ee e7 e2 f0 e0 f9 e0 f2 fc ..... ..........
0710: 20 e4 e0 ed ed fb e5 20 e8 e7 20 ed ee e2 ee e9 ...... .. .....
0720: 20 e7 e0 ef e8 f1 e8 2e 0d 0a 09 63 6f 6e 73 74 ..........const
0730: 20 63 68 61 72 2a 20 74 61 62 6c 65 52 65 61 64 char* tableRead
0740: 42 75 66 65 72 28 29 09 63 6f 6e 73 74 20 7b 72 Bufer().const {r
0750: 65 74 75 72 6e 20 70 54 61 62 6c 65 42 75 66 3b eturn pTableBuf;
0760: 7d 0d 0a 09 2f 2f 20 d0 e0 e7 ec e5 f0 20 e1 f3 }...// ...... ..
0770: f4 e5 f0 e0 20 e7 e0 ef e8 f1 e8 20 f2 e0 e1 eb .... ...... ....
0780: e8 f6 fb 2e 0d 0a 09 44 57 4f 52 44 20 72 65 63 .......DWORD rec
0790: 6f 72 64 53 69 7a 65 28 29 09 09 09 09 63 6f 6e ordSize()....con
07a0: 73 74 20 7b 72 65 74 75 72 6e 20 72 65 63 53 69 st {return recSi
07b0: 7a 65 3b 7d 0d 0a 0d 0a 09 2f 2f 20 c8 f2 e5 f0 ze;}.....// ....
07c0: e0 f2 ee f0 20 e4 eb ff 20 e2 fb ff f1 ed e5 ed .... ... .......
07d0: e8 ff 2c 20 e2 20 ea e0 ea e8 e5 20 f4 e8 e7 e8 .., . ..... ....
07e0: f7 e5 f1 ea e8 e5 20 e8 ed e4 e5 ea f1 fb 20 e2 ...... ....... .
07f0: f5 ee e4 e8 f2 20 f4 e8 e7 e8 f7 e5 f1 ea ee e5 ..... ..........
0800: 20 ef ee eb e5 0d 0a 09 2f 2f 20 e8 20 ef ee e7 .......// . ...
0810: e8 f6 e8 fe 20 e2 f5 ee e6 e4 e5 ed e8 ff 20 e2 .... ......... .
0820: 20 e8 ed e4 e5 ea f1 e5 0d 0a 09 73 74 72 75 63 ..........struc
0830: 74 20 66 6c 64 32 69 64 78 49 74 0d 0a 09 7b 0d t fld2idxIt...{.
0840: 0a 09 09 6f 70 65 72 61 74 6f 72 20 42 4f 4f 4c ...operator BOOL
0850: 28 29 20 7b 72 65 74 75 72 6e 20 70 74 72 20 3c () {return ptr <
0860: 20 65 6e 64 3b 7d 0d 0a 09 09 44 57 4f 52 44 20 end;}....DWORD
0870: 69 64 78 4e 75 6d 28 29 09 7b 72 65 74 75 72 6e idxNum().{return
0880: 20 28 2a 70 74 72 29 20 26 20 30 78 46 46 46 46 (*ptr) & 0xFFFF
0890: 3b 7d 0d 0a 09 09 44 57 4f 52 44 20 66 6c 64 4e ;}....DWORD fldN
08a0: 75 6d 28 29 09 7b 72 65 74 75 72 6e 20 28 2a 70 um().{return (*p
08b0: 74 72 29 20 3e 3e 20 31 36 3b 7d 0d 0a 09 09 76 tr) >> 16;}....v
08c0: 6f 69 64 20 6f 70 65 72 61 74 6f 72 2b 2b 28 29 oid operator++()
08d0: 20 7b 70 74 72 2b 2b 3b 7d 0d 0a 09 70 72 69 76 {ptr++;}...priv
08e0: 61 74 65 3a 0d 0a 09 09 66 72 69 65 6e 64 20 70 ate:....friend p
08f0: 68 69 73 69 63 61 6c 5f 69 6e 66 6f 3b 0d 0a 09 hisical_info;...
0900: 09 66 6c 64 32 69 64 78 49 74 28 63 6f 6e 73 74 .fld2idxIt(const
0910: 20 44 57 4f 52 44 2a 20 73 2c 20 63 6f 6e 73 74 DWORD* s, const
0920: 20 44 57 4f 52 44 2a 20 65 29 20 3a 20 70 74 72 DWORD* e) : ptr
0930: 28 73 29 2c 20 65 6e 64 28 65 29 7b 7d 0d 0a 09 (s), end(e){}...
0940: 09 63 6f 6e 73 74 20 44 57 4f 52 44 20 2a 70 74 .const DWORD *pt
0950: 72 2c 20 2a 65 6e 64 3b 0d 0a 09 7d 3b 0d 0a 0d r, *end;...};...
0960: 0a 09 0d 0a 09 66 6c 64 32 69 64 78 49 74 20 66 .....fld2idxIt f
0970: 6c 64 32 69 64 78 28 44 57 4f 52 44 20 66 6c 64 ld2idx(DWORD fld
0980: 29 09 63 6f 6e 73 74 0d 0a 09 7b 0d 0a 09 09 44 ).const...{....D
0990: 57 4f 52 44 20 64 20 3d 20 6d 5f 70 46 69 65 6c WORD d = m_pFiel
09a0: 64 73 32 49 6e 64 65 78 5b 66 6c 64 5d 3b 0d 0a ds2Index[fld];..
09b0: 09 09 63 6f 6e 73 74 20 44 57 4f 52 44 20 2a 70 ..const DWORD *p
09c0: 53 20 3d 20 28 44 57 4f 52 44 2a 29 6d 5f 70 46 S = (DWORD*)m_pF
09d0: 69 65 6c 64 73 20 2b 20 4c 4f 57 4f 52 44 28 64 ields + LOWORD(d
09e0: 29 2c 20 2a 70 45 20 3d 20 70 53 20 2b 20 48 49 ), *pE = pS + HI
09f0: 57 4f 52 44 28 64 29 3b 0d 0a 09 09 72 65 74 75 WORD(d);....retu
0a00: 72 6e 20 66 6c 64 32 69 64 78 49 74 28 70 53 2c rn fld2idxIt(pS,
0a10: 20 70 45 29 3b 0d 0a 09 7d 0d 0a 09 0d 0a 70 72 pE);...}.....pr
0a20: 69 76 61 74 65 3a 0d 0a 09 66 72 69 65 6e 64 20 ivate:...friend
0a30: 63 6c 61 73 73 20 43 56 74 61 62 49 6e 66 6f 3b class CVtabInfo;
0a40: 0d 0a 0d 0a 09 70 68 69 73 69 63 61 6c 5f 69 6e .....phisical_in
0a50: 66 6f 28 29 7b 7d 0d 0a 0d 0a 09 73 74 61 74 69 fo(){}.....stati
0a60: 63 20 70 68 69 73 69 63 61 6c 5f 69 6e 66 6f 2a c phisical_info*
0a70: 20 62 75 69 6c 64 49 6e 66 6f 28 43 54 61 62 6c buildInfo(CTabl
0a80: 65 45 78 2a 20 70 54 61 62 6c 65 29 3b 0d 0a 0d eEx* pTable);...
0a90: 0a 09 63 6f 6e 73 74 20 63 68 61 72 2a 20 70 54 ..const char* pT
0aa0: 61 62 6c 65 42 75 66 3b 0d 0a 09 44 57 4f 52 44 ableBuf;...DWORD
0ab0: 20 72 65 63 53 69 7a 65 3b 0d 0a 09 44 57 4f 52 recSize;...DWOR
0ac0: 44 20 66 6c 64 43 6f 75 6e 74 3b 0d 0a 09 44 57 D fldCount;...DW
0ad0: 4f 52 44 20 69 64 78 43 6f 75 6e 74 3b 0d 0a 09 ORD idxCount;...
0ae0: 44 57 4f 52 44 2a 20 6d 5f 70 46 69 65 6c 64 73 DWORD* m_pFields
0af0: 32 49 6e 64 65 78 3b 0d 0a 09 69 6e 64 65 78 5f 2Index;...index_
0b00: 69 6e 66 6f 2a 2a 20 6d 5f 70 70 49 6e 64 65 78 info** m_ppIndex
0b10: 65 73 3b 0d 0a 09 66 69 65 6c 64 5f 69 6e 66 6f es;...field_info
0b20: 20 6d 5f 70 46 69 65 6c 64 73 5b 31 5d 3b 0d 0a m_pFields[1];..
0b30: 09 2f 2f 5b 66 69 65 6c 64 5f 69 6e 66 6f 20 2a .//[field_info *
0b40: 20 6e 46 69 65 6c 64 73 5d 20 5b 44 57 4f 52 44 nFields] [DWORD
0b50: 20 2a 20 6e 46 69 65 6c 64 73 5d 20 5b 69 6e 64 * nFields] [ind
0b60: 65 78 5f 69 6e 66 30 2a 20 2a 20 6e 49 6e 64 65 ex_inf0* * nInde
0b70: 78 65 73 5d 20 5b 66 6c 64 32 69 64 78 49 74 20 xes] [fld2idxIt
0b80: 2a 20 66 6c 64 49 6e 49 64 78 5d 20 5b 69 6e 64 * fldInIdx] [ind
0b90: 65 78 5f 69 6e 66 6f 7e 20 2a 20 6e 49 64 65 78 ex_info~ * nIdex
0ba0: 65 73 5d 0d 0a 7d 3b 0d 0a es]..};..