#ifndef __SCCQUEUE__
#define __SCCQUEUE__
#include "sys/types.h"
extern "C"
{
#include <kern/lock.h>
}
typedef struct CirQueue
{
UInt8 *Start;
UInt8 *End;
UInt8 *NextChar;
UInt8 *LastChar;
size_t Size;
size_t InQueue;
IOWorkLoop *Workloop;
} CirQueue;
typedef enum QueueStatus
{
queueNoError = 0,
queueFull,
queueEmpty,
queueMaxStatus
} QueueStatus;
QueueStatus InitQueue(CirQueue *Queue, UInt8 *Buffer, size_t Size, IOWorkLoop *workloop);
QueueStatus CloseQueue(CirQueue *Queue);
void ResetQueue(CirQueue *Queue);
size_t AddtoQueue(CirQueue *Queue, UInt8 *Buffer, size_t Size);
size_t RemovefromQueue(CirQueue *Queue, UInt8 *Buffer, size_t MaxSize);
size_t FreeSpaceinQueue(CirQueue *Queue);
size_t UsedSpaceinQueue(CirQueue *Queue);
size_t GetQueueSize( CirQueue *Queue);
QueueStatus AddBytetoQueue(CirQueue *Queue, char Value);
QueueStatus GetBytetoQueue(CirQueue *Queue, UInt8 *Value);
QueueStatus GetQueueStatus(CirQueue *Queue);
UInt8* BeginDirectReadFromQueue(CirQueue *Queue, size_t *size, bool *queueWrapped);
void EndDirectReadFromQueue(CirQueue *Queue, size_t size);
#endif