#ifndef __CBUFFERSEGMENT_H
#define __CBUFFERSEGMENT_H
#include "CBuffer.h"
enum { kDefaultCBufferSize = (2048 + 20) };
class CBufferSegment : public CBuffer
{
OSDeclareDefaultStructors(CBufferSegment);
public:
static CBufferSegment * New(Size len = kDefaultCBufferSize); static CBufferSegment * New(UByte *buffer, Size len); void free();
void Delete();
virtual int Peek(void);
virtual int Next(void);
virtual uintptr_t Skip(void);
virtual int Get(void);
virtual Size Getn(UByte* p, Size n);
virtual int CopyOut(UByte* p, Size& n);
virtual int Put(int dataByte);
virtual Size Putn(const UByte* p, Size n);
virtual int CopyIn(const UByte* p, Size& n);
virtual void Reset(void);
virtual Long Hide(Long count, int dir);
virtual Size Seek(Long off, int dir);
virtual Size Position(void) const;
virtual Size GetSize(void) const;
virtual Boolean AtEOF(void) const;
UByte* GetBufferPtr(void);
Size GetBufferSize(void);
UInt8 * GetBufferBase( void );
private:
Boolean Init(UByte *buffer, Size len);
Boolean fFreeMe;
UByte* fBufBase;
UByte* fBufEnd;
Size fSize;
UByte* fBase;
UByte* fMark;
UByte* fEnd;
};
inline UByte* CBufferSegment::GetBufferPtr()
{ return fBase; }
inline Size CBufferSegment::GetBufferSize()
{ return (Size) (fEnd - fBase); }
inline UInt8 * CBufferSegment::GetBufferBase() { return fBufBase; }
inline void CBufferSegment::Delete(void) { this->release(); return; }
#endif