brzeszczot

brzeszczot.git
git clone git://git.lenczewski.org/brzeszczot.git
Log | Files | Refs

commit 6fb2707be146908e8d80fe74ed1c55a5ca353171
parent c6ec992e45d19e0aaa02953795bacc144b7b7a12
Author: MikoĊ‚aj Lenczewski <mblenczewski@gmail.com>
Date:   Mon, 13 Feb 2023 00:38:15 +0000

Fix inline extern specifiers for riot_intrusive_list(_node) functions

Diffstat:
Mlibriot/include/libriot.h | 51+++++++++++++++++++++++++++++++++++++++++++++++----
Mlibriot/src/libriot.c | 30+++++++++---------------------
2 files changed, 56 insertions(+), 25 deletions(-)

diff --git a/libriot/include/libriot.h b/libriot/include/libriot.h @@ -15,13 +15,56 @@ struct riot_intrusive_list_node { riot_relptr_t prev, next; }; -extern inline void +inline void riot_intrusive_list_node_link(struct riot_intrusive_list_node *self, struct riot_intrusive_list_node *prev, - struct riot_intrusive_list_node *next); + struct riot_intrusive_list_node *next) { + assert(self); + assert(prev); + assert(next); -extern inline void -riot_intrusive_list_node_snip(struct riot_intrusive_list_node *self); + prev->next = RELPTR_ABS2REL(riot_relptr_t, prev, self); + self->prev = RELPTR_ABS2REL(riot_relptr_t, self, prev); + self->next = RELPTR_ABS2REL(riot_relptr_t, self, next); + next->prev = RELPTR_ABS2REL(riot_relptr_t, next, self); +} + +inline void +riot_intrusive_list_node_snip(struct riot_intrusive_list_node *self) { + assert(self); + + struct riot_intrusive_list_node *prev, *next; + prev = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, self, self->prev); + next = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, self, self->next); + + prev->next = RELPTR_ABS2REL(riot_relptr_t, prev, next); + next->prev = RELPTR_ABS2REL(riot_relptr_t, next, prev); + self->prev = self->next = RELPTR_NULL; +} + +struct riot_intrusive_list { + struct riot_intrusive_list_node root; +}; + +inline void +riot_intrusive_list_init(struct riot_intrusive_list *self) { + assert(self); + + self->root.prev = self->root.next = RELPTR_ABS2REL(riot_relptr_t, &self->root, &self->root); +} + +inline void +riot_intrusive_list_push(struct riot_intrusive_list *self, + struct riot_intrusive_list_node *elem) { + assert(self); + assert(elem); + + struct riot_intrusive_list_node *prev, *next; + prev = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, &self->root, self->root.prev); + next = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, &self->root, self->root.next); + + riot_intrusive_list_node_link(elem, prev, next); +} typedef u32 fnv1a_u32; typedef u64 xxh64_u64; diff --git a/libriot/src/libriot.c b/libriot/src/libriot.c @@ -1,28 +1,16 @@ #include "libriot.h" -void +extern inline void riot_intrusive_list_node_link(struct riot_intrusive_list_node *self, struct riot_intrusive_list_node *prev, - struct riot_intrusive_list_node *next) { - assert(self); - assert(prev); - assert(next); + struct riot_intrusive_list_node *next); - prev->next = RELPTR_ABS2REL(riot_relptr_t, prev, self); - self->prev = RELPTR_ABS2REL(riot_relptr_t, self, prev); - self->next = RELPTR_ABS2REL(riot_relptr_t, self, next); - next->prev = RELPTR_ABS2REL(riot_relptr_t, next, self); -} +extern inline void +riot_intrusive_list_node_snip(struct riot_intrusive_list_node *self); -void -riot_intrusive_list_node_snip(struct riot_intrusive_list_node *self) { - assert(self); +extern inline void +riot_intrusive_list_init(struct riot_intrusive_list *self); - struct riot_intrusive_list_node *prev, *next; - prev = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, self, self->prev); - next = RELPTR_REL2ABS(struct riot_intrusive_list_node *, riot_relptr_t, self, self->next); - - prev->next = RELPTR_ABS2REL(riot_relptr_t, prev, next); - next->prev = RELPTR_ABS2REL(riot_relptr_t, next, prev); - self->prev = self->next = RELPTR_NULL; -} +extern inline void +riot_intrusive_list_push(struct riot_intrusive_list *self, + struct riot_intrusive_list_node *elem);