git/list.h

/*
 * Copyright (C) 2002 Free Software Foundation, Inc.
 * (originally part of the GNU C Library and Userspace RCU)
 * Contributed by Ulrich Drepper <[email protected]>, 2002.
 *
 * Copyright (C) 2009 Pierre-Marc Fournier
 * Conversion to RCU list.
 * Copyright (C) 2010 Mathieu Desnoyers <[email protected]>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see
 * <https://www.gnu.org/licenses/>.
 */

#ifndef LIST_H
#define LIST_H

/*
 * The definitions of this file are adopted from those which can be
 * found in the Linux kernel headers to enable people familiar with the
 * latter find their way in these sources as well.
 */

/* Basic type for the double-link list. */
struct list_head {};

/* avoid conflicts with BSD-only sys/queue.h */
#undef LIST_HEAD
/* Define a variable with the head and tail of the list. */
#define LIST_HEAD(name)

/* Initialize a new list head. */
#define INIT_LIST_HEAD(ptr)

#define LIST_HEAD_INIT(name)

/* Add new element at the head of the list. */
static inline void list_add(struct list_head *newp, struct list_head *head)
{}

/* Add new element at the tail of the list. */
static inline void list_add_tail(struct list_head *newp, struct list_head *head)
{}

/* Remove element from list. */
static inline void __list_del(struct list_head *prev, struct list_head *next)
{}

/* Remove element from list. */
static inline void list_del(struct list_head *elem)
{}

/* Remove element from list, initializing the element's list pointers. */
static inline void list_del_init(struct list_head *elem)
{}

/* Delete from list, add to another list as head. */
static inline void list_move(struct list_head *elem, struct list_head *head)
{}

/* Replace an old entry. */
static inline void list_replace(struct list_head *old, struct list_head *newp)
{}

/* Join two lists. */
static inline void list_splice(struct list_head *add, struct list_head *head)
{}

/* Get typed element from list at a given position. */
#define list_entry(ptr, type, member)

/* Get first entry from a list. */
#define list_first_entry(ptr, type, member)

/* Iterate forward over the elements of the list. */
#define list_for_each(pos, head)

/*
 * Iterate forward over the elements list. The list elements can be
 * removed from the list while doing this.
 */
#define list_for_each_safe(pos, p, head)

/* Iterate backward over the elements of the list. */
#define list_for_each_prev(pos, head)

/*
 * Iterate backwards over the elements list. The list elements can be
 * removed from the list while doing this.
 */
#define list_for_each_prev_safe(pos, p, head)

static inline int list_empty(struct list_head *head)
{}

static inline void list_replace_init(struct list_head *old,
				     struct list_head *newp)
{}

/*
 * This is exactly the same as a normal list_head, except that it can be
 * declared volatile (e.g., if you have a list that may be accessed from signal
 * handlers).
 */
struct volatile_list_head {};

#define VOLATILE_LIST_HEAD(name)

static inline void __volatile_list_del(volatile struct volatile_list_head *prev,
				       volatile struct volatile_list_head *next)
{}

static inline void volatile_list_del(volatile struct volatile_list_head *elem)
{}

static inline int volatile_list_empty(volatile struct volatile_list_head *head)
{}

static inline void volatile_list_add(volatile struct volatile_list_head *newp,
				     volatile struct volatile_list_head *head)
{}

#endif /* LIST_H */