/* This file is part of actube. actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. libcapwap 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . */ #ifndef __MLIST_H #define __MLIST_H /** * @file * @brief Mlist Mini list */ /** * @defgroup MLIST MLIST * @{ */ /** * Element of an mlist. * It's a simple connected list, just with pone connection to the * next element. */ struct mlist_elem { /** Pointer to data */ void *data; /** * Pointer to next element * The last element is determined by a NULL pointer * */ struct mlist_elem *next; struct mlist_elem *prev; }; struct mlist { void *data; int (*cmp) (const void *d1, const void *d2); struct mlist_elem *first; struct mlist_elem *last; int count; //size_t elem_size; }; typedef struct mlist * mlist_t; /** * defgroup MLIST_FUNCTIONS * @{ */ extern mlist_t mlist_create(int (*cmp) (const void *v1, const void *v2)); extern struct mlist_elem *mlist_append(mlist_t l, void *data); extern struct mlist_elem *mlist_find(mlist_t l, struct mlist_elem *start, void *data); extern struct mlist_elem *mlist_replace(mlist_t l, struct mlist_elem *start, void *data); #define mlist_add mlist_append /** * @} */ #define mlist_foreach(i,l)\ for (i=l->first; i; i=i->next) /** * @} */ #endif