<div dir="ltr">1) In you example you are writing this with normal arrays:<div><br></div><div>A[0].X := 0;</div><div><br></div><div>And in my implementation it's exactly the same. Regarding writing the entire type directly<br><div><br></div><div>A[0]^ := V;</div></div><div><br></div><div>If using the caret symbol ^ or an Item property is a deal breaker, then this can be simplified using a custom smart pointer type similar to how the aligned array type was implemented resulting in the same syntax as in the first example.</div><div><br></div><div>2) As I've implemented them aligned array is compatible with dynamic arrays. They implicitly convert between the two with no loss of data. If you truly want to share the data within each, then you can define functions to work on referencing the data types they hold, allowing the same function to serve either type.</div><div><br></div><div>For example:</div><div><br></div><div>procedure VectorTransform(Matrix: TMat4; FirstVertex: PVec3; Count: Integer); </div><div><br></div><div>and then</div><div><br></div><div>Matrix.Rotate(12.5, 0, 0);</div><div>VectorTransform(Matrix, AlignedData[0], AlignedData.Length);</div><div>VectorTransform(Matrix, @DynamicArray[0], Length(AlignedData));</div><div><br class="gmail-Apple-interchange-newline"></div><div>Or you can even overload VectorTransform if you don't want to see @ symbols. </div><div><br></div><div><div>procedure VectorTransform(Matrix: TMat4; FirstVertex: var TVec3; Count: Integer); overload;</div><br class="gmail-Apple-interchange-newline"></div><div>3) Regarding Hi, Lo, Length, I prefer to put these functions on types. For example</div><div><br></div><div>for I := A.Lo to A.Hi do A[I].X := I;</div><div><br></div><div>Is that such a deal breaker?</div></div>