[PATCH v0 01/15] libiberty: add implementations of common methods for type-sensitive doubly linked lists
Matthieu Longo
matthieu.longo@arm.com
Tue Mar 11 11:24:43 GMT 2025
On 2025-03-11 07:57, Jan Beulich wrote:
> On 10.03.2025 18:51, Matthieu Longo wrote:
>> Those methods's implementation is relying on duck-typing at compile
>> time.
>> The structure corresponding to the node of a doubly linked list needs
>> to define attributes 'prev' and 'next' which are pointers on the type
>> of a node.
>> The structure wrapping the nodes and others metadata (first, last, size)
>> needs to define pointers 'first_', and 'last_' of the node's type, and
>> an integer type for 'size'.
>>
>> Mutative methods are bundled together and are declarable once via a
>> same macro. The merge sort is bundled separately.
>> There are 3 types of macros:
>> 1. for the declaration of protypes: to use in a header file for a
>> public declaration, or as a forward declaration in the souce file
>> for private declaration.
>> 2. for the declaration of the implementation: always to use in a
>> source file.
>> 3. for the invokation of the functions.
>>
>> The methods are declarable public or private via the second argument of
>> the declaration macros.
>>
>> List of currently implemented methods:
>> - LINKED_LIST_:
>> - APPEND: insert a node at the end of the list.
>> - PREPEND: insert a node at the beginning of the list.
>> - INSERT_BEFORE: insert a node before the given node.
>> - POP_FRONT: remove the first node of the list.
>> - POP_BACK: remove the last node of the list.
>> - REMOVE: remove the given node from the list.
>> - LINKED_LIST_MERGE_SORT: a merge sort implementation.
>> ---
>> include/double-linked-list.h | 313 +++++++++++++++++++++++++
>> libiberty/Makefile.in | 1 +
>> libiberty/testsuite/Makefile.in | 12 +-
>> libiberty/testsuite/test-linked-list.c | 244 +++++++++++++++++++
>> 4 files changed, 569 insertions(+), 1 deletion(-)
>> create mode 100644 include/double-linked-list.h
>> create mode 100644 libiberty/testsuite/test-linked-list.c
>
> Iiuc libiberty changes want to go through gcc, to then be mirrored into binutils.
>
> Jan
The idea here is that I am introducing a new container along the code
changes using it. If I send directly this patch to GCC mailing list, I
am suspecting that the first questions from the reviewers would be: "Why
did you add this ? What is it used for ?".
I am aligned with you on this, and I understand well that this change
has to go through GCC at first to be merged. However, I would be
interested in getting feedbacks here in binutils, because it is very
likely that GCC will never use this as it already has access to the C++
list container.
Matthieu.
More information about the Binutils
mailing list