text: //========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  // $NoKeywords: $
  //
  // Serialization/unserialization buffer
  //=============================================================================//
  
  #ifndef UTLSTREAMBUFFER_H
  #define UTLSTREAMBUFFER_H
  
  #ifdef _WIN32
  #pragma once
  #endif
  
  #include "tier1/utlbuffer.h"
  #include "filesystem.h"
  
  
  //-----------------------------------------------------------------------------
  // Command parsing..
  //-----------------------------------------------------------------------------
  class CUtlStreamBuffer : public CUtlBuffer
  {
  	typedef CUtlBuffer BaseClass;
  
  public:
  	// See CUtlBuffer::BufferFlags_t for flags
  	CUtlStreamBuffer( );
  	CUtlStreamBuffer( const char *pFileName, const char *pPath, int nFlags = 0, bool bDelayOpen = false );
  	~CUtlStreamBuffer();
  
  	// Open the file. normally done in constructor
  	void Open( const char *pFileName, const char *pPath, int nFlags );
  
  	// close the file. normally done in destructor
  	void Close();
  
  	// Is the file open?
  	bool IsOpen() const;
  
  private:
  	// error flags
  	enum
  	{
  		FILE_OPEN_ERROR = MAX_ERROR_FLAG << 1,
  		FILE_WRITE_ERROR = MAX_ERROR_FLAG << 2,
  	};
  
  	// Overflow functions
  	bool StreamPutOverflow( int nSize );
  	bool StreamGetOverflow( int nSize );
  
  	// Grow allocation size to fit requested size
  	void GrowAllocatedSize( int nSize );
  
  	// Reads bytes from the file; fixes up maxput if necessary and null terminates
  	int ReadBytesFromFile( int nBytesToRead, int nReadOffset );
  
  	FileHandle_t OpenFile( const char *pFileName, const char *pPath );
  
  	FileHandle_t m_hFileHandle;
  
  	char *m_pFileName;
  	char *m_pPath;
  };
  
  
  #endif // UTLSTREAMBUFFER_H
  
  