libosmocore 0.9.6-23.20170220git32ee5af8.fc42
Osmocom core library
Loading...
Searching...
No Matches

Simple doubly linked list implementation. More...

#include <stddef.h>

Go to the source code of this file.

Data Structures

struct  llist_head
 (double) linked list header structure More...
 

Macros

#define inline   __inline__
 
#define container_of(ptr, type, member)
 cast a member of a structure out to the containing structure
 
#define LLIST_POISON1   ((void *) 0x00100100)
 
#define LLIST_POISON2   ((void *) 0x00200200)
 
#define LLIST_HEAD_INIT(name)
 
#define LLIST_HEAD(name)
 define a statically-initialized llist_head
 
#define INIT_LLIST_HEAD(ptr)
 initialize a llist_head to point back to self
 
#define llist_entry(ptr, type, member)
 Get the struct containing this list entry.
 
#define llist_for_each(pos, head)
 Iterate over a linked list.
 
#define __llist_for_each(pos, head)
 Iterate over a llist (no prefetch)
 
#define llist_for_each_prev(pos, head)
 Iterate over a llist backwards.
 
#define llist_for_each_safe(pos, n, head)
 Iterate over a list; safe against removal of llist entry.
 
#define llist_for_each_entry(pos, head, member)
 Iterate over llist of given type.
 
#define llist_for_each_entry_reverse(pos, head, member)
 Iterate backwards over llist of given type.
 
#define llist_for_each_entry_continue(pos, head, member)
 iterate over llist of given type continuing after existing point
 
#define llist_for_each_entry_safe(pos, n, head, member)
 iterate over llist of given type, safe against removal of non-consecutive(!) llist entries
 
#define llist_for_each_rcu(pos, head)
 
#define __llist_for_each_rcu(pos, head)
 
#define llist_for_each_safe_rcu(pos, n, head)
 
#define llist_for_each_entry_rcu(pos, head, member)
 
#define llist_for_each_continue_rcu(pos, head)
 

Functions

static void prefetch (const void *x)
 
static void __llist_add (struct llist_head *_new, struct llist_head *prev, struct llist_head *next)
 Insert a new entry between two known consecutive entries.
 
static void llist_add (struct llist_head *_new, struct llist_head *head)
 add a new entry into a linked list (at head)
 
static void llist_add_tail (struct llist_head *_new, struct llist_head *head)
 add a new entry into a linked list (at tail)
 
static void __llist_del (struct llist_head *prev, struct llist_head *next)
 
static void llist_del (struct llist_head *entry)
 Delete entry from linked list.
 
static void llist_del_init (struct llist_head *entry)
 Delete entry from linked list and reinitialize it.
 
static void llist_move (struct llist_head *llist, struct llist_head *head)
 Delete from one llist and add as another's head.
 
static void llist_move_tail (struct llist_head *llist, struct llist_head *head)
 Delete from one llist and add as another's tail.
 
static int llist_empty (const struct llist_head *head)
 Test whether a linked list is empty.
 
static void __llist_splice (struct llist_head *llist, struct llist_head *head)
 
static void llist_splice (struct llist_head *llist, struct llist_head *head)
 Join two llists.
 
static void llist_splice_init (struct llist_head *llist, struct llist_head *head)
 join two llists and reinitialise the emptied llist.
 
static unsigned int llist_count (struct llist_head *head)
 count nr of llist items by iterating.
 

Detailed Description

Simple doubly linked list implementation.

Some of the internal functions ("__xxx") are useful when manipulating whole llists rather than single entries, as sometimes we already know the next/prev entries and we can generate better code by using them directly rather than using the generic single-entry routines.