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.
|
|
/*++
Copyright (C) Microsoft Corporation, 1995 - 1999
Module Name:
buffers
Abstract:
This header file provides dynamic buffer and string classes for general use.
Author:
Doug Barlow (dbarlow) 10/5/1995
Environment:
Win32, C++ w/ Exception Handling
Notes:
--*/
#ifndef _BUFFERS_H_
#define _BUFFERS_H_
//
//==============================================================================
//
// CBuffer
//
class CBuffer { public:
// Constructors & Destructor
CBuffer() // Default Initializer
{ Initialize(); };
CBuffer( // Initialize with starting length.
IN DWORD cbLength) { Initialize(); Presize(cbLength, FALSE); };
CBuffer( // Initialize with starting data.
IN const BYTE * const pbSource, IN DWORD cbLength) { Initialize(); Set(pbSource, cbLength); };
virtual ~CBuffer() // Tear down.
{ Clear(); };
// Properties
// Methods
void Clear(void); // Free up any allocated memory.
LPBYTE Reset(void); // Return to default state (don't loose memory.)
LPBYTE Presize( // Make sure the buffer is big enough.
IN DWORD cbLength, IN BOOL fPreserve = FALSE);
LPBYTE Resize( // Make sure the buffer & length are the right size.
DWORD cbLength, BOOL fPreserve = FALSE);
LPBYTE Set( // Load a value.
IN const BYTE * const pbSource, IN DWORD cbLength);
LPBYTE Append( // Append more data to the existing data.
IN const BYTE * const pbSource, IN DWORD cbLength);
DWORD Length( // Return the length of the data.
void) const { return m_cbDataLength; };
DWORD Space( // Return the length of the buffer.
void) const { return m_cbBufferLength; };
LPBYTE Access( // Return the data, starting at an offset.
DWORD offset = 0) const { if (m_cbBufferLength <= offset) return (LPBYTE)TEXT("\x00"); else return &m_pbBuffer[offset]; };
int Compare( const CBuffer &bfSource) const;
// Operators
CBuffer & operator=( IN const CBuffer &bfSource) { Set(bfSource.m_pbBuffer, bfSource.m_cbDataLength); return *this; };
CBuffer & operator+=( IN const CBuffer &bfSource) { Append(bfSource.m_pbBuffer, bfSource.m_cbDataLength); return *this; };
BYTE & operator[]( DWORD offset) const { return *Access(offset); };
int operator==( IN const CBuffer &bfSource) const { return 0 == Compare(bfSource); };
int operator!=( IN const CBuffer &bfSource) const { return 0 != Compare(bfSource); };
operator LPCBYTE(void) { return (LPCBYTE)Access(); };
operator LPCTSTR(void) { return (LPCTSTR)Access(); };
protected:
// Properties
LPBYTE m_pbBuffer; DWORD m_cbDataLength; DWORD m_cbBufferLength;
// Methods
void Initialize(void) { m_pbBuffer = NULL; m_cbDataLength = 0; m_cbBufferLength = 0; };
CBuffer( // Object assignment constructor.
IN const CBuffer &bfSourceOne, IN const CBuffer &bfSourceTwo);
friend CBuffer & operator+( IN const CBuffer &bfSourceOne, IN const CBuffer &bfSourceTwo); };
#endif // _BUFFERS_H_
|