[vlc-devel] [PATCH 1/9] vlc_list: add a typedef vlc_list_node to clarify which is the list and which is the node
Rémi Denis-Courmont
remi at remlab.net
Mon Aug 20 16:16:12 CEST 2018
The objects tree is a tree. Each object has a list of children.
Le 20 août 2018 13:57:10 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
>On 20/08/2018 12:05, Rémi Denis-Courmont wrote:
>> This is standard terminology for a tree structure. Siblings are on
>> same level. Children are below and parent is above.
>
>For me a list is flat, not a tree. You can always transverse them back
>and forth, but not up and down. The implementation doesn't do that
>either.
>
>The main storage (head) is in one place and the nodes are in another
>one
>and they are not equivalent.
>
>>
>> Le 20 août 2018 10:24:51 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a
>
>> écrit :
>>
>> An example of the confusion we want to avoid and what led me to
>dig into
>> this code:
>>
>> vlc_list siblings
>>
>> Is is a list or a list item/node ? The plural led me to think it
>it's a
>> list of siblings but I was wrong. Having "vlc_list_node siblings"
>would
>> clear that confusion.
>>
>>
>> On 20/08/2018 09:21, Steve Lhomme wrote:
>>
>> On 17/08/2018 19:06, Rémi Denis-Courmont wrote:
>>
>> You cannot have a different typedef here. This is by
>> design. And we already use different member names for
>> heads and nodes.
>>
>> It's possible, it's even desirable. "vlc_list node" is the
>> part that doesn't make sense here. A node is not a list, the
>> fact it shares the same internals is because of the current
>> design. It may change in the future, but what is 100% is that
>> a node must not be used as a vlc_list despite its type. And
>so
>> it should not imply it can be from its type (maybe the
>> mnemonic is wrong, who knows).
>>
>> Le 17 août 2018 16:04:33 GMT+03:00, Steve Lhomme
>> <robux4 at ycbcr.xyz> a écrit : ---
>> include/vlc_list.h | 23 +++++++++++++---------- 1
>> file changed, 13 insertions(+), 10 deletions(-) diff
>> --git a/include/vlc_list.h b/include/vlc_list.h index
>> 45263cc789..002119db6b 100644 ---
>a/include/vlc_list.h
>> +++ b/include/vlc_list.h @@ -45,6 +45,9 @@ struct
>> vlc_list struct vlc_list *next; };
>> +/* type to use in list items to differentiate with
>> the list itself */ +typedef struct vlc_list
>> vlc_list_node; + /** * Static
>initializer
>> for a list head. */ @@ -66,7 +69,7 @@ static
>> inline void vlc_list_init(struct vlc_list *restrict head)
>> * \param prev Node pointer of the previous
>element.
>> * \param next Node pointer of the next element.
>> */ -static inline void
>> vlc_list_add_between(struct vlc_list *restrict node,
>> +static inline void vlc_list_add_between(vlc_list_node
>> *restrict node,
>> struct
>> vlc_list *prev,
>> struct
>> vlc_list *next) { @@ -82,7 +85,7 @@ static
>> inline void vlc_list_add_between(struct vlc_list
>*restrict
>> node, * \param node Node pointer of the element to
>> insert [OUT]. * \param prev Node pointer of the
>> previous element. */ -static inline void
>> vlc_list_add_after(struct vlc_list *restrict node,
>> +static inline void vlc_list_add_after(vlc_list_node
>> *restrict node,
>> struct
>> vlc_list *prev) {
>> vlc_list_add_between(node, prev, prev->next); @@
>-94,7
>> +97,7 @@ static inline void vlc_list_add_after(struct
>> vlc_list *restrict node, * \param node Node
>pointer
>> of the element to insert [OUT]. * \param prev Node
>> pointer of the next element. */ -static inline
>> void vlc_list_add_before(struct vlc_list *restrict node,
>> +static inline void vlc_list_add_before(vlc_list_node
>> *restrict node,
>> struct
>> vlc_list *next) {
>> vlc_list_add_between(node, next->prev, next); @@
>> -106,7 +109,7 @@ static inline void
>> vlc_list_add_before(struct vlc_list *restrict node,
>
>> * \param node Node pointer of the element to append to
>the
>> list [OUT]. * \param head Head pointer of the list
>> to append the element to. */ -static inline
>> void vlc_list_append(struct vlc_list *restrict node,
>> +static inline void vlc_list_append(vlc_list_node
>> *restrict node,
>> struct vlc_list *head) {
>> vlc_list_add_before(node, head); @@ -118,7 +121,7 @@
>> static inline void vlc_list_append(struct vlc_list
>> *restrict node, * \param node Node pointer of the
>> element to prepend to the list [OUT]. * \param
>head
>> Head pointer of the list to prepend the element to.
>
>> */ -static inline void vlc_list_prepend(struct
>> vlc_list *restrict node, +static inline void
>> vlc_list_prepend(vlc_list_node *restrict node,
>> struct vlc_list
>> *head) { vlc_list_add_after(node, head);
>> @@ -131,7 +134,7 @@ static inline void
>> vlc_list_prepend(struct vlc_list *restrict node, *
>> \warning The element must be inside a list. *
>> Otherwise the behaviour is undefined. */
>> -static inline void vlc_list_remove(struct vlc_list
>> *restrict node) +static inline void
>> vlc_list_remove(vlc_list_node *restrict node) {
>> struct vlc_list *prev = node->prev;
>> struct vlc_list *next = node->next; @@ -177,7 +180,7
>> @@ static inline bool vlc_list_is_empty(const struct
>> vlc_list *head) * \retval false The element is not
>> first (or is in another list). * \retval true The
>> element is first. */ -static inline bool
>> vlc_list_is_first(const struct vlc_list *node,
>+static
>> inline bool vlc_list_is_first(const vlc_list_node *node,
>> const struct
>> vlc_list *head) { return node->prev ==
>> head; @@ -192,7 +195,7 @@ static inline bool
>> vlc_list_is_first(const struct vlc_list *node, *
>> \retval false The element is not last (or is in another
>> list). * \retval true The element is last.
>> */ -static inline bool vlc_list_is_last(const struct
>> vlc_list *node, +static inline bool
>> vlc_list_is_last(const vlc_list_node *node,
>> const struct
>> vlc_list *head) { return node->next ==
>> head; @@ -289,7 +292,7 @@ static inline void
>> *vlc_list_last_or_null(const struct vlc_list *head,
>> } static inline void
>> *vlc_list_prev_or_null(const struct vlc_list *head,
>> - struct
>vlc_list
>> *node, +
>> vlc_list_node *node,
>> size_t
>> offset) { if (vlc_list_is_first(node,
>> head)) @@ -298,7 +301,7 @@ static inline void
>> *vlc_list_prev_or_null(const struct vlc_list *head,
>> } static inline void
>> *vlc_list_next_or_null(const struct vlc_list *head,
>> - struct
>vlc_list
>> *node, +
>> vlc_list_node *node,
>> size_t
>> offset) { if (vlc_list_is_last(node,
>> head)) -- Envoyé de mon appareil Android avec Courriel
>K-9
>> Mail. Veuillez excuser ma brièveté.
>>
>------------------------------------------------------------------------
>> vlc-devel mailing list To unsubscribe or modify your
>> subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>>
>>
>------------------------------------------------------------------------
>> vlc-devel mailing list To unsubscribe or modify your
>> subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>>
>>
>>
>------------------------------------------------------------------------
>>
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>>
>>
>> --
>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>> excuser ma brièveté.
>>
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
--
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20180820/ade2bc9c/attachment.html>
More information about the vlc-devel
mailing list