142 lines
2.5 KiB
C
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
|