/* StarPU --- Runtime system for heterogeneous multicore architectures.
 *
 * Copyright (C) 2010-2017                                CNRS
 * Copyright (C) 2009-2011,2014,2016                      Université de Bordeaux
 * Copyright (C) 2011,2012                                Inria
 *
 * StarPU 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.
 *
 * StarPU 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 in COPYING.LGPL for more details.
 */

/*! \defgroup API_Task_Lists Task Lists

\struct starpu_task_list
Stores a double-chained list of tasks
\ingroup API_Task_Lists
\var struct starpu_task *starpu_task_list::head
    head of the list
\var struct starpu_task *starpu_task_list::tail
    tail of the list

\fn void starpu_task_list_init(struct starpu_task_list *list)
\ingroup API_Task_Lists
Initialize a list structure

\fn void starpu_task_list_push_front(struct starpu_task_list *list, struct starpu_task *task)
\ingroup API_Task_Lists
Push \p task at the front of \p list

\fn void starpu_task_list_push_back(struct starpu_task_list *list, struct starpu_task *task)
\ingroup API_Task_Lists
Push \p task at the back of \p list

\fn struct starpu_task *starpu_task_list_front(const struct starpu_task_list *list)
\ingroup API_Task_Lists
Get the front of \p list (without removing it)

\fn struct starpu_task *starpu_task_list_back(const struct starpu_task_list *list)
\ingroup API_Task_Lists
Get the back of \p list (without removing it)

\fn int starpu_task_list_empty(const struct starpu_task_list *list)
\ingroup API_Task_Lists
Test if \p list is empty

\fn void starpu_task_list_erase(struct starpu_task_list *list, struct starpu_task *task)
\ingroup API_Task_Lists
Remove \p task from \p list

\fn struct starpu_task *starpu_task_list_pop_front(struct starpu_task_list *list)
\ingroup API_Task_Lists
Remove the element at the front of \p list

\fn struct starpu_task *starpu_task_list_pop_back(struct starpu_task_list *list)
\ingroup API_Task_Lists
Remove the element at the back of \p list

\fn struct starpu_task *starpu_task_list_begin(const struct starpu_task_list *list)
\ingroup API_Task_Lists
Get the first task of \p list.

\fn struct starpu_task *starpu_task_list_end(const struct starpu_task_list *list)
\ingroup API_Task_Lists
Get the end of \p list.

\fn struct starpu_task *starpu_task_list_next(const struct starpu_task *task)
\ingroup API_Task_Lists
Get the next task of \p list. This is not erase-safe.

\fn int starpu_task_list_ismember(const struct starpu_task_list *list, const struct starpu_task *look)
\ingroup API_Task_Lists
Test whether the given task \p look is contained in the \p list.

*/