Artifact 41942e064e2938757db4daba32a368312b8e3bec:
0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78 #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 66 .h"..#include "f
0020: 69 6c 65 2e 68 22 0d 0a 75 73 69 6e 67 20 6e 61 ile.h"..using na
0030: 6d 65 73 70 61 63 65 20 6b 69 3b 0d 0a 0d 0a 0d mespace ki;.....
0040: 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ...//===========
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a ==============..
0090: 0d 0a 46 69 6c 65 52 3a 3a 46 69 6c 65 52 28 29 ..FileR::FileR()
00a0: 0d 0a 09 3a 20 68 61 6e 64 6c 65 5f 20 28 20 49 ...: handle_ ( I
00b0: 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 NVALID_HANDLE_VA
00c0: 4c 55 45 20 29 0d 0a 09 2c 20 66 6d 6f 5f 20 20 LUE )..., fmo_
00d0: 20 20 28 20 4e 55 4c 4c 20 29 0d 0a 09 2c 20 62 ( NULL )..., b
00e0: 61 73 65 50 74 72 5f 28 20 4e 55 4c 4c 20 29 0d asePtr_( NULL ).
00f0: 0a 7b 0d 0a 7d 0d 0a 0d 0a 46 69 6c 65 52 3a 3a .{..}....FileR::
0100: 7e 46 69 6c 65 52 28 29 0d 0a 7b 0d 0a 09 43 6c ~FileR()..{...Cl
0110: 6f 73 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f ose();..}....boo
0120: 6c 20 46 69 6c 65 52 3a 3a 4f 70 65 6e 28 20 63 l FileR::Open( c
0130: 6f 6e 73 74 20 54 43 48 41 52 2a 20 66 6e 61 6d onst TCHAR* fnam
0140: 65 20 29 0d 0a 7b 0d 0a 09 43 6c 6f 73 65 28 29 e )..{...Close()
0150: 3b 0d 0a 0d 0a 09 2f 2f 20 83 74 83 40 83 43 83 ;.....// .t.@.C.
0160: 8b 82 f0 93 c7 82 dd 82 c6 82 e8 90 ea 97 70 82 ..............p.
0170: c5 8a 4a 82 ad 0d 0a 09 68 61 6e 64 6c 65 5f 20 ..J.....handle_
0180: 3d 20 3a 3a 43 72 65 61 74 65 46 69 6c 65 28 0d = ::CreateFile(.
0190: 0a 09 09 66 6e 61 6d 65 2c 20 47 45 4e 45 52 49 ...fname, GENERI
01a0: 43 5f 52 45 41 44 2c 0d 0a 09 09 46 49 4c 45 5f C_READ,....FILE_
01b0: 53 48 41 52 45 5f 52 45 41 44 7c 46 49 4c 45 5f SHARE_READ|FILE_
01c0: 53 48 41 52 45 5f 57 52 49 54 45 2c 0d 0a 09 09 SHARE_WRITE,....
01d0: 4e 55 4c 4c 2c 20 4f 50 45 4e 5f 45 58 49 53 54 NULL, OPEN_EXIST
01e0: 49 4e 47 2c 0d 0a 09 09 46 49 4c 45 5f 41 54 54 ING,....FILE_ATT
01f0: 52 49 42 55 54 45 5f 4e 4f 52 4d 41 4c 7c 46 49 RIBUTE_NORMAL|FI
0200: 4c 45 5f 46 4c 41 47 5f 53 45 51 55 45 4e 54 49 LE_FLAG_SEQUENTI
0210: 41 4c 5f 53 43 41 4e 2c 20 4e 55 4c 4c 0d 0a 09 AL_SCAN, NULL...
0220: 29 3b 0d 0a 09 69 66 28 20 68 61 6e 64 6c 65 5f );...if( handle_
0230: 20 3d 3d 20 49 4e 56 41 4c 49 44 5f 48 41 4e 44 == INVALID_HAND
0240: 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09 09 72 65 LE_VALUE )....re
0250: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 turn false;.....
0260: 2f 2f 20 83 54 83 43 83 59 82 f0 8e e6 93 be 0d // .T.C.Y.......
0270: 0a 09 73 69 7a 65 5f 20 3d 20 3a 3a 47 65 74 46 ..size_ = ::GetF
0280: 69 6c 65 53 69 7a 65 28 20 68 61 6e 64 6c 65 5f ileSize( handle_
0290: 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 0d 0a 09 69 66 , NULL );.....if
02a0: 28 20 73 69 7a 65 5f 3d 3d 30 20 29 0d 0a 09 7b ( size_==0 )...{
02b0: 0d 0a 09 09 2f 2f 20 30 83 6f 83 43 83 67 82 cc ....// 0.o.C.g..
02c0: 83 74 83 40 83 43 83 8b 82 cd 83 7d 83 62 83 73 .t.@.C.....}.b.s
02d0: 83 93 83 4f 8f 6f 97 88 82 c8 82 a2 82 cc 82 c5 ...O.o..........
02e0: 93 4b 93 96 82 c9 89 f1 94 f0 0d 0a 09 09 62 61 .K............ba
02f0: 73 65 50 74 72 5f 20 3d 20 26 73 69 7a 65 5f 3b sePtr_ = &size_;
0300: 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d ...}...else...{.
0310: 0a 09 09 2f 2f 20 83 7d 83 62 83 73 83 93 83 4f ...// .}.b.s...O
0320: 83 49 83 75 83 57 83 46 83 4e 83 67 82 f0 8d ec .I.u.W.F.N.g....
0330: 82 e9 0d 0a 09 09 66 6d 6f 5f 20 3d 20 3a 3a 43 ......fmo_ = ::C
0340: 72 65 61 74 65 46 69 6c 65 4d 61 70 70 69 6e 67 reateFileMapping
0350: 28 0d 0a 09 09 09 68 61 6e 64 6c 65 5f 2c 20 4e (.....handle_, N
0360: 55 4c 4c 2c 20 50 41 47 45 5f 52 45 41 44 4f 4e ULL, PAGE_READON
0370: 4c 59 2c 20 30 2c 20 30 2c 20 4e 55 4c 4c 20 29 LY, 0, 0, NULL )
0380: 3b 0d 0a 09 09 69 66 28 20 66 6d 6f 5f 20 3d 3d ;....if( fmo_ ==
0390: 20 4e 55 4c 4c 20 29 0d 0a 09 09 7b 0d 0a 09 09 NULL )....{....
03a0: 09 3a 3a 43 6c 6f 73 65 48 61 6e 64 6c 65 28 20 .::CloseHandle(
03b0: 68 61 6e 64 6c 65 5f 20 29 3b 0d 0a 09 09 09 68 handle_ );.....h
03c0: 61 6e 64 6c 65 5f 20 3d 20 49 4e 56 41 4c 49 44 andle_ = INVALID
03d0: 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 3b 0d 0a _HANDLE_VALUE;..
03e0: 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ...return false;
03f0: 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 2f 2f 20 83 72 ....}......// .r
0400: 83 85 81 5b 0d 0a 09 09 62 61 73 65 50 74 72 5f ...[....basePtr_
0410: 20 3d 20 3a 3a 4d 61 70 56 69 65 77 4f 66 46 69 = ::MapViewOfFi
0420: 6c 65 28 20 66 6d 6f 5f 2c 20 46 49 4c 45 5f 4d le( fmo_, FILE_M
0430: 41 50 5f 52 45 41 44 2c 20 30 2c 20 30 2c 20 30 AP_READ, 0, 0, 0
0440: 20 29 3b 0d 0a 09 09 69 66 28 20 62 61 73 65 50 );....if( baseP
0450: 74 72 5f 20 3d 3d 20 4e 55 4c 4c 20 29 0d 0a 09 tr_ == NULL )...
0460: 09 7b 0d 0a 09 09 09 3a 3a 43 6c 6f 73 65 48 61 .{.....::CloseHa
0470: 6e 64 6c 65 28 20 66 6d 6f 5f 20 29 3b 0d 0a 09 ndle( fmo_ );...
0480: 09 09 3a 3a 43 6c 6f 73 65 48 61 6e 64 6c 65 28 ..::CloseHandle(
0490: 20 68 61 6e 64 6c 65 5f 20 29 3b 0d 0a 09 09 09 handle_ );.....
04a0: 68 61 6e 64 6c 65 5f 20 3d 20 49 4e 56 41 4c 49 handle_ = INVALI
04b0: 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 3b 0d D_HANDLE_VALUE;.
04c0: 0a 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 ....return false
04d0: 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 72 65 74 ;....}...}...ret
04e0: 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a urn true;..}....
04f0: 76 6f 69 64 20 46 69 6c 65 52 3a 3a 43 6c 6f 73 void FileR::Clos
0500: 65 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 68 61 6e e()..{...if( han
0510: 64 6c 65 5f 20 21 3d 20 49 4e 56 41 4c 49 44 5f dle_ != INVALID_
0520: 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a HANDLE_VALUE )..
0530: 09 7b 0d 0a 09 09 2f 2f 20 83 77 83 93 83 65 83 .{....// .w...e.
0540: 52 83 7d 83 62 83 73 83 93 83 4f 82 f0 82 b5 82 R.}.b.s...O.....
0550: c4 82 c8 82 af 82 ea 82 ce 82 b1 82 b1 82 c5 89 ................
0560: f0 95 fa 0d 0a 09 09 69 66 28 20 62 61 73 65 50 .......if( baseP
0570: 74 72 5f 20 21 3d 20 26 73 69 7a 65 5f 20 29 0d tr_ != &size_ ).
0580: 0a 09 09 09 3a 3a 55 6e 6d 61 70 56 69 65 77 4f ....::UnmapViewO
0590: 66 46 69 6c 65 28 20 63 6f 6e 73 74 5f 63 61 73 fFile( const_cas
05a0: 74 3c 76 6f 69 64 2a 3e 28 62 61 73 65 50 74 72 t<void*>(basePtr
05b0: 5f 29 20 29 3b 0d 0a 09 09 62 61 73 65 50 74 72 _) );....basePtr
05c0: 5f 20 3d 20 4e 55 4c 4c 3b 0d 0a 0d 0a 09 09 69 _ = NULL;......i
05d0: 66 28 20 66 6d 6f 5f 20 21 3d 20 4e 55 4c 4c 20 f( fmo_ != NULL
05e0: 29 0d 0a 09 09 09 3a 3a 43 6c 6f 73 65 48 61 6e ).....::CloseHan
05f0: 64 6c 65 28 20 66 6d 6f 5f 20 29 3b 0d 0a 09 09 dle( fmo_ );....
0600: 66 6d 6f 5f 20 3d 20 4e 55 4c 4c 3b 0d 0a 0d 0a fmo_ = NULL;....
0610: 09 09 3a 3a 43 6c 6f 73 65 48 61 6e 64 6c 65 28 ..::CloseHandle(
0620: 20 68 61 6e 64 6c 65 5f 20 29 3b 0d 0a 09 09 68 handle_ );....h
0630: 61 6e 64 6c 65 5f 20 3d 20 49 4e 56 41 4c 49 44 andle_ = INVALID
0640: 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 3b 0d 0a _HANDLE_VALUE;..
0650: 09 7d 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d .}..}........//=
0660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
06a0: 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 46 69 6c 65 ========....File
06b0: 57 3a 3a 46 69 6c 65 57 28 29 0d 0a 09 3a 20 42 W::FileW()...: B
06c0: 55 46 53 49 5a 45 28 20 36 35 35 33 36 20 29 0d UFSIZE( 65536 ).
06d0: 0a 09 2c 20 68 61 6e 64 6c 65 5f 28 20 49 4e 56 .., handle_( INV
06e0: 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 ALID_HANDLE_VALU
06f0: 45 20 29 0d 0a 09 2c 20 62 75 66 5f 20 20 20 28 E )..., buf_ (
0700: 20 6e 65 77 20 75 63 68 61 72 5b 42 55 46 53 49 new uchar[BUFSI
0710: 5a 45 5d 20 29 0d 0a 7b 0d 0a 7d 0d 0a 0d 0a 46 ZE] )..{..}....F
0720: 69 6c 65 57 3a 3a 7e 46 69 6c 65 57 28 29 0d 0a ileW::~FileW()..
0730: 7b 0d 0a 09 43 6c 6f 73 65 28 29 3b 0d 0a 09 64 {...Close();...d
0740: 65 6c 65 74 65 20 5b 5d 20 62 75 66 5f 3b 0d 0a elete [] buf_;..
0750: 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 76 6f 69 64 }....inline void
0760: 20 46 69 6c 65 57 3a 3a 46 6c 75 73 68 28 29 0d FileW::Flush().
0770: 0a 7b 0d 0a 09 44 57 4f 52 44 20 64 75 6d 6d 79 .{...DWORD dummy
0780: 3b 0d 0a 09 3a 3a 57 72 69 74 65 46 69 6c 65 28 ;...::WriteFile(
0790: 20 68 61 6e 64 6c 65 5f 2c 20 62 75 66 5f 2c 20 handle_, buf_,
07a0: 62 50 6f 73 5f 2c 20 26 64 75 6d 6d 79 2c 20 4e bPos_, &dummy, N
07b0: 55 4c 4c 20 29 3b 0d 0a 09 62 50 6f 73 5f 20 3d ULL );...bPos_ =
07c0: 20 30 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 46 0;..}....bool F
07d0: 69 6c 65 57 3a 3a 4f 70 65 6e 28 20 63 6f 6e 73 ileW::Open( cons
07e0: 74 20 54 43 48 41 52 2a 20 66 6e 61 6d 65 2c 20 t TCHAR* fname,
07f0: 62 6f 6f 6c 20 63 72 65 61 74 20 29 0d 0a 7b 0d bool creat )..{.
0800: 0a 09 43 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 09 2f ..Close();...../
0810: 2f 20 83 74 83 40 83 43 83 8b 82 f0 8f 91 82 ab / .t.@.C........
0820: 8d 9e 82 dd 90 ea 97 70 82 c5 8a 4a 82 ad 0d 0a .......p...J....
0830: 09 68 61 6e 64 6c 65 5f 20 3d 20 3a 3a 43 72 65 .handle_ = ::Cre
0840: 61 74 65 46 69 6c 65 28 20 66 6e 61 6d 65 2c 0d ateFile( fname,.
0850: 0a 09 09 47 45 4e 45 52 49 43 5f 57 52 49 54 45 ...GENERIC_WRITE
0860: 2c 20 46 49 4c 45 5f 53 48 41 52 45 5f 52 45 41 , FILE_SHARE_REA
0870: 44 2c 20 4e 55 4c 4c 2c 0d 0a 09 09 63 72 65 61 D, NULL,....crea
0880: 74 20 3f 20 43 52 45 41 54 45 5f 41 4c 57 41 59 t ? CREATE_ALWAY
0890: 53 20 3a 20 4f 50 45 4e 5f 45 58 49 53 54 49 4e S : OPEN_EXISTIN
08a0: 47 2c 0d 0a 09 09 46 49 4c 45 5f 41 54 54 52 49 G,....FILE_ATTRI
08b0: 42 55 54 45 5f 4e 4f 52 4d 41 4c 20 7c 20 46 49 BUTE_NORMAL | FI
08c0: 4c 45 5f 46 4c 41 47 5f 53 45 51 55 45 4e 54 49 LE_FLAG_SEQUENTI
08d0: 41 4c 5f 53 43 41 4e 2c 20 4e 55 4c 4c 20 29 3b AL_SCAN, NULL );
08e0: 0d 0a 09 69 66 28 20 68 61 6e 64 6c 65 5f 20 3d ...if( handle_ =
08f0: 3d 20 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 = INVALID_HANDLE
0900: 5f 56 41 4c 55 45 20 29 0d 0a 09 09 72 65 74 75 _VALUE )....retu
0910: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 62 50 rn false;.....bP
0920: 6f 73 5f 20 3d 20 30 3b 0d 0a 09 72 65 74 75 72 os_ = 0;...retur
0930: 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f n true;..}....vo
0940: 69 64 20 46 69 6c 65 57 3a 3a 43 6c 6f 73 65 28 id FileW::Close(
0950: 29 0d 0a 7b 0d 0a 09 69 66 28 20 68 61 6e 64 6c )..{...if( handl
0960: 65 5f 20 21 3d 20 49 4e 56 41 4c 49 44 5f 48 41 e_ != INVALID_HA
0970: 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09 7b NDLE_VALUE )...{
0980: 0d 0a 09 09 46 6c 75 73 68 28 29 3b 0d 0a 09 09 ....Flush();....
0990: 3a 3a 43 6c 6f 73 65 48 61 6e 64 6c 65 28 20 68 ::CloseHandle( h
09a0: 61 6e 64 6c 65 5f 20 29 3b 0d 0a 09 09 68 61 6e andle_ );....han
09b0: 64 6c 65 5f 20 3d 20 49 4e 56 41 4c 49 44 5f 48 dle_ = INVALID_H
09c0: 41 4e 44 4c 45 5f 56 41 4c 55 45 3b 0d 0a 09 7d ANDLE_VALUE;...}
09d0: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 46 69 6c 65 ..}....void File
09e0: 57 3a 3a 57 72 69 74 65 28 20 63 6f 6e 73 74 20 W::Write( const
09f0: 76 6f 69 64 2a 20 64 61 74 2c 20 75 6c 6f 6e 67 void* dat, ulong
0a00: 20 73 69 7a 20 29 0d 0a 7b 0d 0a 09 63 6f 6e 73 siz )..{...cons
0a10: 74 20 75 63 68 61 72 2a 20 75 64 61 74 20 3d 20 t uchar* udat =
0a20: 73 74 61 74 69 63 5f 63 61 73 74 3c 63 6f 6e 73 static_cast<cons
0a30: 74 20 75 63 68 61 72 2a 3e 28 64 61 74 29 3b 0d t uchar*>(dat);.
0a40: 0a 0d 0a 09 77 68 69 6c 65 28 20 28 42 55 46 53 ....while( (BUFS
0a50: 49 5a 45 2d 62 50 6f 73 5f 29 20 3c 3d 20 73 69 IZE-bPos_) <= si
0a60: 7a 20 29 0d 0a 09 7b 0d 0a 09 09 6d 65 6d 6d 6f z )...{....memmo
0a70: 76 65 28 20 62 75 66 5f 2b 62 50 6f 73 5f 2c 20 ve( buf_+bPos_,
0a80: 75 64 61 74 2c 20 42 55 46 53 49 5a 45 2d 62 50 udat, BUFSIZE-bP
0a90: 6f 73 5f 20 29 3b 0d 0a 09 09 73 69 7a 20 20 2d os_ );....siz -
0aa0: 3d 20 28 42 55 46 53 49 5a 45 2d 62 50 6f 73 5f = (BUFSIZE-bPos_
0ab0: 29 3b 0d 0a 09 09 75 64 61 74 20 2b 3d 20 28 42 );....udat += (B
0ac0: 55 46 53 49 5a 45 2d 62 50 6f 73 5f 29 3b 0d 0a UFSIZE-bPos_);..
0ad0: 09 09 62 50 6f 73 5f 20 3d 20 42 55 46 53 49 5a ..bPos_ = BUFSIZ
0ae0: 45 3b 0d 0a 09 09 46 6c 75 73 68 28 29 3b 0d 0a E;....Flush();..
0af0: 09 7d 0d 0a 0d 0a 09 6d 65 6d 6d 6f 76 65 28 20 .}.....memmove(
0b00: 62 75 66 5f 2b 62 50 6f 73 5f 2c 20 75 64 61 74 buf_+bPos_, udat
0b10: 2c 20 73 69 7a 20 29 3b 0d 0a 09 62 50 6f 73 5f , siz );...bPos_
0b20: 20 2b 3d 20 73 69 7a 3b 0d 0a 7d 0d 0a 0d 0a 76 += siz;..}....v
0b30: 6f 69 64 20 46 69 6c 65 57 3a 3a 57 72 69 74 65 oid FileW::Write
0b40: 43 28 20 75 63 68 61 72 20 63 68 20 29 0d 0a 7b C( uchar ch )..{
0b50: 0d 0a 09 69 66 28 20 28 42 55 46 53 49 5a 45 2d ...if( (BUFSIZE-
0b60: 62 50 6f 73 5f 29 20 3c 3d 20 31 20 29 0d 0a 09 bPos_) <= 1 )...
0b70: 09 46 6c 75 73 68 28 29 3b 0d 0a 0d 0a 09 62 75 .Flush();.....bu
0b80: 66 5f 5b 62 50 6f 73 5f 2b 2b 5d 20 3d 20 63 68 f_[bPos_++] = ch
0b90: 3b 0d 0a 7d 0d 0a 0d 0a ;..}....