So einen Ringspeicher habe ich gerade erst implementiert. Dabei habe ich für den Zugriff auf die Elemente zu Pointern gegriffen, so dass ich auch Records darin speichern und direkt darauf zugreifen kann.
// EDIT:
Sprich:
Delphi-Quellcode:
TCircularBuffer<T> = class
public
type
TBufferPointer = ^T;
strict private
var
FElements: TArray<T>;
[...]
public
type
TBufferEnumerator = class(TEnumerator<TCircularBuffer<T>.TBufferPointer>)
[...]
procedure Next;
function GetEnumerator: TBufferEnumerator;
property Current: TBufferPointer read GetCurrent;
property Size: Integer read GetSize write SetSize;
property Element[AIndex: Integer]: TBufferPointer read GetElement; default;
end;