windows-nt/Source/XPSP1/NT/net/ias/providers/accounting/outbuf.h
2020-09-26 16:20:57 +08:00

79 lines
1.7 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998, Microsoft Corp. All rights reserved.
//
// FILE
//
// outbuf.h
//
// SYNOPSIS
//
// Declares the class OutputBuffer.
//
// MODIFICATION HISTORY
//
// 08/04/1998 Original version.
// 07/09/1999 Add OutputBuffer::empty
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _OUTBUF_H_
#define _OUTBUF_H_
#if _MSC_VER >= 1000
#pragma once
#endif
#include <nocopy.h>
///////////////////////////////////////////////////////////////////////////////
//
// CLASS
//
// OutputBuffer
//
// DESCRIPTION
//
// Implements a dynamically resized buffer suitable for formatting output.
//
///////////////////////////////////////////////////////////////////////////////
class OutputBuffer
: NonCopyable
{
public:
OutputBuffer() throw ();
~OutputBuffer() throw ();
// Append an octet string.
void append(const BYTE* buf, DWORD buflen);
// Append a null-terminated ANSI string.
void append(PCSTR sz);
// Append a single ANSI character.
void append(CHAR ch);
bool empty() const throw ()
{ return next == start; }
// Returns a pointer to the embedded buffer.
PBYTE getBuffer() const throw ()
{ return start; }
// Returns the number of bytes currently stored in the buffer.
DWORD getLength() const throw ()
{ return (DWORD)(next - start); }
// Reserves 'nbyte' bytes in the buffer and returns a pointer to the
// reserved bytes.
PBYTE reserve(DWORD nbyte);
protected:
// Resizes the buffer and updates cursor to point into the new buffer.
void resize(PBYTE& cursor);
PBYTE start, next, end;
BYTE scratch[0x400];
};
#endif // _OUTBUF_H_