Enderal SE
https://mod.pub/enderal-se/38-enderal-se
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
857 B
27 lines
857 B
#pragma once
|
|
|
|
class IFIFO
|
|
{
|
|
public:
|
|
IFIFO(UInt32 length = 0);
|
|
virtual ~IFIFO();
|
|
|
|
virtual bool Push(UInt8 * buf, UInt32 length);
|
|
virtual bool Pop(UInt8 * buf, UInt32 length);
|
|
virtual bool Peek(UInt8 * buf, UInt32 length);
|
|
virtual void Clear(void);
|
|
|
|
UInt32 GetBufferSize(void) { return fifoBufSize; }
|
|
UInt32 GetBufferRemain(void) { return fifoBufSize - fifoDataLength; }
|
|
UInt32 GetDataLength(void) { return fifoDataLength; }
|
|
|
|
private:
|
|
UInt32 ToRawOffset(UInt32 in) { return in % fifoBufSize; }
|
|
UInt32 ToDataOffset(UInt32 in) { return ToRawOffset(fifoBase + in); }
|
|
UInt32 GetWriteOffset(void) { return ToDataOffset(fifoDataLength); }
|
|
|
|
UInt8 * fifoBuf;
|
|
UInt32 fifoBufSize; // size of the buffer (in bytes)
|
|
UInt32 fifoBase; // pointer to the beginning of the data block
|
|
UInt32 fifoDataLength; // size of the data block
|
|
};
|
|
|