[fpc-devel] Aligned dynamic arrays

Anthony Walter sysrpl at gmail.com
Fri Mar 29 12:26:47 CET 2019


There is a bounty for this? I wonder if my solution is acceptable.

Also, my solution, or any for that matter, could be enhanced to make the
alignment size configurable per each array aligned array. That is, memory
alignment starting position and page size could be defined by each array.
This would allow for more flexibility and would be trivial enough to adapt
to what I've provided.

Finally, these methods could be added to the type, making it like a super
array or list:

    { Returns the lower bounds of the list }
    function Lo: Integer;
    { Returns the upper bounds of the list }
    function Hi: Integer;
    { Reverses the items in the list }
    procedure Reverse;
    { Swap two items by index in the list }
    procedure Exchange(A, B: Integer);
    { Adds and item to the end of the list }
    procedure PushRange(const Collection: array of T);
    { Remove an item randomly from the list }
    function PopRandom: T;
    { Return a copy of the list with items passing through a filter }
    function Filter(Func: TFilterFunc<T>): TArrayList<T>;
    { Return the first item matching a condition }
    function FirstOf(Func: TFilterFunc<T>): T;
    { Removes an item by index from the list and decreases the count by one
    procedure Delete(Index: Integer);
    { Sort the items using a comparer }
    procedure Sort(Order: TSortingOrder = soAscend; Comparer: TCompare<T> =
    { Attempt to find the item using DefaultCompare }
    function IndexOf(const Item: T): Integer;
    { Join a the array into a string using a separator }
    function Join(const Separator: string; Convert: TConvertString<T> =
nil): string;
    { Returns true if ther are no items in the list }
    property IsEmpty: Boolean read GetIsEmpty;
    { First item in the list }
    property First: T read GetFirst write SetFirst;
    { Last item in the list }
    property Last: T read GetLast write SetLast;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190329/3a0f0e82/attachment.html>

More information about the fpc-devel mailing list