core: clist without explicit thread
Right now the core component `clist` is a generic cyclic doubly-linked list. In the core it is used in `tcb_t::rq_entry`. Further it is used `net_if.c`. This commit removes the member `clist_node_t::data` which stored the pointer to the `tcb_t` instance of which the clist is already a member. The needless member added `sizeof (int)` bytes to every instance of `tcb_t`. In `net_if.c` the clist was used in a type-punned way, so that the change won't affect it.dev/timer
parent
27e393621a
commit
a5c9d4572d
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Freie Universität Berlin
|
||||
*
|
||||
* This file subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup core_util
|
||||
* @{
|
||||
*
|
||||
* @file kernel_macros.h
|
||||
* @brief common macros
|
||||
*
|
||||
* @author René Kijewski
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/**
|
||||
* @def container_of(PTR, TYPE, MEMBER)
|
||||
* @brief Returns the container of a pointer to a member.
|
||||
* @details For a struct `TYPE` with a member `MEMBER`,
|
||||
* given a pointer `PTR` to `TYPE::MEMBER` this function returns a pointer
|
||||
* to the instance of `TYPE`.
|
||||
* @details E.g. for `struct my_struct_t { ...; something_t n; ... } my_struct;`,
|
||||
* `&my_struct == container_of(&my_struct.n, struct my_struct_t, n)`.
|
||||
* @param[in] PTR pointer to a member
|
||||
* @param[in] TYPE a type name (a struct or union), container of PTR
|
||||
* @param[in] MEMBER name of the member of TYPE which PTR points to
|
||||
* @return Pointer to the container of PTR.
|
||||
*/
|
||||
#if __STDC_VERSION__ >= 201112L
|
||||
# define container_of(PTR, TYPE, MEMBER) \
|
||||
(_Generic((PTR), \
|
||||
const __typeof__ (((TYPE *) 0)->MEMBER) *: \
|
||||
((TYPE *) ((char *) (PTR) - offsetof(TYPE, MEMBER))), \
|
||||
__typeof__ (((TYPE *) 0)->MEMBER) *: \
|
||||
((TYPE *) ((char *) (PTR) - offsetof(TYPE, MEMBER))) \
|
||||
))
|
||||
#elif defined __GNUC__
|
||||
# define container_of(PTR, TYPE, MEMBER) \
|
||||
(__extension__ ({ \
|
||||
__extension__ const __typeof__ (((TYPE *) 0)->MEMBER) *__m____ = (PTR); \
|
||||
((TYPE *) ((char *) __m____ - offsetof(TYPE, MEMBER))); \
|
||||
}))
|
||||
#else
|
||||
# define container_of(PTR, TYPE, MEMBER) \
|
||||
((TYPE *) ((char *) (PTR) - offsetof(TYPE, MEMBER)))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
Loading…
Reference in New Issue