<div dir="ltr"><div dir="ltr"><div>Inside the type I have:</div><div><br></div><div>  TAlignedArray<T> = record </div><div>  public</div><div>    type</div><div>      TReference = ^T;</div><div>      TValue = T;</div><div>    ...</div><div>    procedure Push(const Item: TValue);</div><div>    function Pop: TValue;</div><div>    property Length: Integer read FLength write SetLength;</div><div>    property Reference[Index: Integer]: TReference read GetReference; default;</div><div>    property Item[Index: Integer]: TValue read GetItem write SetItem;      </div><div>    ...</div><div>  end;</div><div>  </div><div>So the default property indexer returns references and not values. If you want values specifically you can use the Item property indexer.</div><div><br></div><div>This way we can either access fields directly on the items withing the array like so:</div><div><br></div><div>A[0].X := SomeValue;</div><div><br></div><div>Or if you need fast access to quickly populate the values, support we want to write 3 component vertex data, you could write:</div><div><br></div><div>type</div><div>  TVertexBuffer = type TAlignedArray<TVector3>;</div><div>var</div><div>  Buffer: TVertexBuffer;</div><div>  V: TVertexBuffer.TReference;</div><div>begin</div><div>  Buffer.Length := VertexCount(ModelStream);</div><div>  V := Buffer[0];</div><div>  for I := 1 to Buffer.Length do</div><div>  begin</div><div>    V.X := ReadX(ModelStream);</div><div>    V.Y := ReadY(ModelStream);</div><div>    V.Z := ReadZ(ModelStream);</div><div>    Inc(V);</div><div>  end;</div><div>  ...</div><div>end;</div><div><br></div><div>Which probably ends up being faster than continually accessing array dynamic values by index.</div></div></div>