Lines Matching full:link

64  * @brief list/link structure
66 * used for both the list object, and the link object(s). offset
69 * when ocs_list_t is used as a link (ocs_list_link_t).
76 ocs_list_t *next; /*<< pointer to head of list (or next if link) */
77 ocs_list_t *prev; /*<< pointer to tail of list (or previous if link) */
78 uint32_t offset; /*<< offset in bytes to the link element of the objects in list */
82 /* item2link - return pointer to link given pointer to an item */
85 /* link2item - return pointer to item given pointer to a link */
86 #define link2item(list, link) ((void*) (((uint8_t*)(link)) - (list)->offset)) argument
92 * offsetof(type, link)
95 * @param offset Offset in bytes in item to the link element
109 #define ocs_list_init(head, type, link) _ocs_list_init(head, offsetof(type, link)) argument
142 * @brief Insert link between two other links
144 * Inserts a link in between two other links
146 * @param a Pointer to first link
147 * @param b Pointer to next link
148 * @param c Pointer to link to insert between a and b
179 * @brief Initialize a list link for debug purposes
181 * For debugging a linked list link element has a magic number that is initialized,
186 * @param link Pointer to link to be initialized
191 ocs_list_init_link(ocs_list_t *list, ocs_list_t *link) in ocs_list_init_link() argument
195 ocs_list_assert(link); in ocs_list_init_link()
197 if (link->magic == 0) { in ocs_list_init_link()
198 link->magic = OCS_LIST_LINK_MAGIC; in ocs_list_init_link()
199 link->offset = list->offset; in ocs_list_init_link()
200 link->next = NULL; in ocs_list_init_link()
201 link->prev = NULL; in ocs_list_init_link()
218 ocs_list_t *link; in ocs_list_add_head() local
224 link = item2link(list, item); in ocs_list_add_head()
225 ocs_list_init_link(list, link); in ocs_list_add_head()
227 ocs_list_assert(link->magic == OCS_LIST_LINK_MAGIC); in ocs_list_add_head()
228 ocs_list_assert(link->offset == list->offset); in ocs_list_add_head()
229 ocs_list_assert(link->next == NULL); in ocs_list_add_head()
230 ocs_list_assert(link->prev == NULL); in ocs_list_add_head()
245 ocs_list_t *link; in ocs_list_add_tail() local
251 link = item2link(list, item); in ocs_list_add_tail()
252 ocs_list_init_link(list, link); in ocs_list_add_tail()
254 ocs_list_assert(link->magic == OCS_LIST_LINK_MAGIC); in ocs_list_add_tail()
255 ocs_list_assert(link->offset == list->offset); in ocs_list_add_tail()
256 ocs_list_assert(link->next == NULL); in ocs_list_add_tail()
257 ocs_list_assert(link->prev == NULL); in ocs_list_add_tail()
259 _ocs_list_insert_link(list->prev, list, link); in ocs_list_add_tail()
320 ocs_list_t *link; in ocs_list_next() local
330 link = item2link(list, item); in ocs_list_next()
332 ocs_list_assert(link->magic == OCS_LIST_LINK_MAGIC, NULL); in ocs_list_next()
333 ocs_list_assert(link->offset == list->offset, NULL); in ocs_list_next()
334 ocs_list_assert(link->next, NULL); in ocs_list_next()
335 ocs_list_assert(link->prev, NULL); in ocs_list_next()
337 if ((link->next) == list) { in ocs_list_next()
341 return link2item(list, link->next); in ocs_list_next()
365 ocs_list_t *link; in ocs_list_remove() local
375 link = item2link(list, item); in ocs_list_remove()
377 ocs_list_assert(link->magic == OCS_LIST_LINK_MAGIC, NULL); in ocs_list_remove()
378 ocs_list_assert(link->offset == list->offset, NULL); in ocs_list_remove()
379 ocs_list_assert(link->next, NULL); in ocs_list_remove()
380 ocs_list_assert(link->prev, NULL); in ocs_list_remove()
382 prev = link->prev; in ocs_list_remove()
383 next = link->next; in ocs_list_remove()
388 link->next = link->prev = NULL; in ocs_list_remove()
433 * @param link Pointer to list link
438 ocs_list_on_list(ocs_list_link_t *link) in ocs_list_on_list() argument
440 return (link->next != NULL); in ocs_list_on_list()