52704.fb2
type
TQueuedBuffers = class private
FBufCount : integer;
FBuffers : PBufferArray;
FHead : integer;
FTail : integer;
protected
function qbGetHead : PBuffer;
function qbGetTail : PBuffer;
public
constructor Create(aBufferCount : integer);
destructor Destroy; override;
procedure AdvanceHead;
procedure AdvanceTail;
property Head : PBuffer read qbGetHead;
property Tail : PBuffer read qbGetTail;
end;
constructor TQueuedBuffer s.Create(aBufferCount : integer);
var
i : integer;
begin
inherited Create;
{распределить буферы}
FBuffers := AllocMem(aBufferCount * sizeof(pointer));
for i := 0 to pred(aBufferCount) do
GetMem(FBuffers^[i], sizeof(TBuffer));
FBufCount := aBufferCount;
end;
destructor TQueuedBuffers.Destroy;
var
i : integer;
begin
{освободить буферы}
if (FBuffers <> nil) then begin
for i := 0 to pred( FBuf Count) do
if (FBuffers^[i] <> nil) then
FreeMem(FBuffers^[i], sizeof(TBuffer));
FreeMem(FBuffers, FBufCount * sizeof(pointer));
end;
inherited Destroy;
end;
procedure TQueuedBuffers.AdvanceHead;
begin
inc(FHead);
if (FHead = FBufCount) then
FHead := 0;
end;
procedure TQueuedBuffers.AdvanceTail;
begin