windows-nt/Source/XPSP1/NT/inetsrv/iis/staxinc/export/writebuf.h
2020-09-26 16:20:57 +08:00

142 lines
2.5 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
writebuf.h
Abstract:
This module contains class declarations/definitions for
CFlatFileWriteBuf
**** Overview ****
The write buffer that buffers up a batch of writes for flatfile.
Using sequential scan is good for reads, but may not be sufficient
for sequential writes. This buffer is only enabled when data
being written to the file is not critical ( meaning losing of data
is OK if the system crashes ).
Author:
Kangrong Yan ( KangYan ) 5-6-1999
Revision History:
--*/
#ifndef _WRITEBUF_H_
#define _WRITEBUF_H_
class CFlatFile;
class CFlatFileWriteBuf { //wb
public:
//
// Constructor, destructor
//
CFlatFileWriteBuf( CFlatFile* pParentFile );
~CFlatFileWriteBuf();
//
// Write the byte range
//
HRESULT WriteFileBuffer(
const DWORD dwOffset,
const PBYTE pb,
const DWORD cb,
PDWORD pdwOffset,
PDWORD pcbWritten );
//
// Flush the buffer into the file
//
HRESULT FlushFile();
//
// Tell the outside world if we are enabled
//
BOOL IsEnabled() const;
//
// Enable the write buffer and give it the buffer size
//
VOID Enable( const DWORD cbBuffer );
//
// Check to see if the buffer needs flush
//
BOOL NeedFlush() const;
private:
//
// Private functions
//
HRESULT WriteFileReal(
const DWORD dwOffset,
const PBYTE pbBuffer,
const DWORD cbBuffer,
PDWORD pdwOffset,
PDWORD pcbWritten
);
DWORD BufferAvail() const;
VOID FillBuffer(
const DWORD dwOffset,
const PBYTE pbBuffer,
const DWORD cbBuffer,
PDWORD pdwOffset,
PDWORD pcbWritten
);
BOOL NeedFlush(
const DWORD dwOffset,
const DWORD cbData
) const;
//
// Back pointer to parent flat file
//
CFlatFile* m_pParentFile;
//
// Buffer pointer
//
PBYTE m_pbBuffer;
//
// Buffer size
//
DWORD m_cbBuffer;
//
// Starting offset that we have buffered
//
DWORD m_iStart;
//
// Ending offset that we have buffered
//
DWORD m_iEnd;
};
#endif