mirror of https://github.com/lianthony/NT4.0
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.
56 lines
1.3 KiB
56 lines
1.3 KiB
#ifndef _CSTREAM_INCLUDED
|
|
#define _CSTREAM_INCLUDED
|
|
|
|
static const UINT INPUT_BUF_SIZE = (64 * 1024);
|
|
static const UINT HFILE_NOTREAD = ((UINT) -2);
|
|
static const UINT DUAL_INPUT_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 pEndBuf - pCurBuf; };
|
|
#ifndef _DEBUG
|
|
char cget() {
|
|
if (pCurBuf < pEndBuf)
|
|
return (char) *pCurBuf++;
|
|
else if (pEndBuf < pbuf + cbBuf)
|
|
return chEOF;
|
|
else
|
|
return ReadBuf();
|
|
}
|
|
#else
|
|
char cget();
|
|
#endif
|
|
|
|
int tell(void) { return lFileBuf + (pCurBuf - pbuf); };
|
|
BOOL STDCALL read(PBYTE 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
|
|
|
|
protected:
|
|
|
|
void WaitForReadAhead(void);
|
|
|
|
int lFilePos; // position in the file
|
|
int lFileBuf; // file position at first of buffer
|
|
HFILE hfile; // file handle
|
|
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
|