Files
2026-06-01 12:46:52 +02:00

63 lines
1.3 KiB
C++

// IQueue.h
//
// FIFO Queue 인터페이스와 plain queue & circual queue 의 구현을 제공.
// 옵션으로 thread-safe 지정 가능.
//
// by Testors
#pragma once
#include <malloc.h>
struct IQueueAllocator
{
virtual void* Alloc( unsigned size )
{
return malloc( size );
}
virtual void* Realloc( void * ptr, unsigned size )
{
return realloc( ptr, size );
}
virtual void Free( void* ptr )
{
return free( ptr );
}
};
struct IQueue
{
enum
{
PLAIN = 0x00,
CIRCULAR = 0x01 << 1,
BLOCK = 0x01 << 2,
};
virtual ~IQueue() {}
virtual unsigned Write( const void* pData, unsigned nSize ) = 0;
virtual unsigned Peek( void* pBuf, unsigned nSize ) = 0;
virtual unsigned Read( void* pBuf, unsigned nSize ) = 0;
virtual unsigned Size() = 0;
virtual unsigned FreeSize() = 0;
virtual unsigned Count() = 0;
virtual bool Clear() = 0;
virtual bool Reserve( unsigned nSize ) = 0;
virtual unsigned GetReservedSize() = 0;
virtual void ResetReservedSize( unsigned nSize ) = 0;
virtual bool Resize( unsigned nSize ) = 0;
virtual const char* GetBuf() = 0;
static IQueue * MakeQueue( IQueueAllocator * pAllocator, unsigned nQueueSize, const char cFlag = PLAIN );
static IQueue * MakeQueue( unsigned nDefaultQueueSize, const char cFlag = PLAIN );
protected:
IQueue() {}
};