Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#ifndef _CSTREAM_INCLUDED
#define _CSTREAM_INCLUDED
static const UINT CSTREAM_BUF_SIZE = (64 * 1024); static const UINT HFILE_NOTREAD = ((UINT) -2); static const UINT DUAL_CSTREAM_BUF_SIZE = (8 * 1024);
#define chEOF ((unsigned char) 255)
class CStream { public: CStream(PCSTR pszFileName); ~CStream(void); int STDCALL seek(int pos, SEEK_TYPE seek = SK_SET); int Remaining() { return (int)(pEndBuf - pCurBuf); };
#ifndef _DEBUG
char cget() { if (pCurBuf < pEndBuf) return (char) *pCurBuf++; else if (pEndBuf < pbuf + cbBuf) { m_fEndOfFile = TRUE; return chEOF; // WARNING! check m_fEndOfFile to confirm return of chEOF is valid
} else return ReadBuf(); }; #else
char cget(); #endif
int tell(void) const { return lFileBuf + (int)(pCurBuf - pbuf); }; BOOL STDCALL doRead(void* pbDst, int cbBytes) { return (read(pbDst, cbBytes) == (UINT) cbBytes); } UINT STDCALL read(void* pbDst, int cbBytes); char ReadBuf(void); friend DWORD WINAPI ReadAhead(LPVOID pv); void Cleanup(void);
BOOL fInitialized; PBYTE pCurBuf; // current position in the buffer
PBYTE pEndBuf; // last position in buffer
BOOL m_fEndOfFile;
HFILE hfile; // file handle
protected:
void WaitForReadAhead(void);
int lFilePos; // position in the file
int lFileBuf; // file position at first of buffer
PBYTE pbuf; // address of allocated buffer
PSTR pszFile; // copy of the filename
int cbBuf; // buffer size
int cThrdRead; // result from read-ahead thread
HANDLE hthrd; DWORD idThrd; BOOL fDualCPU; };
#endif // _CSTREAM_INCLUDED
|