trema/trema-edge

View on GitHub
src/lib/linked_list.h

Summary

Maintainability
Test Coverage
/*
 * Author: Yasuhito Takamiya <yasuhito@gmail.com>
 *
 * Copyright (C) 2008-2013 NEC Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License, version 2, as
 * published by the Free Software Foundation.
 *
 * This program 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 this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */


/**
 * @file
 *
 * @brief Linked lists containing pointers to data, limited to
 * iterating over the list in one direction.
 *
 * Each element in the list contains a piece of data, together with a
 * pointer which links to the next element in the list. Using this
 * pointer it is possible to move through the list in one direction
 * only (unlike the Doubly-Linked Lists which allow movement in both
 * directions).
 *
 * @code
 * // Create a linked list ("alpha" => "bravo" => "charlie")
 * list_element *list;
 * create_list( &list );
 * append_to_tail( &list, "alpha" );
 * append_to_tail( &list, "bravo" );
 * append_to_tail( &list, "charlie" );
 *
 * // Delete element "bravo" from the list
 * delete_element( &list, "bravo" ); // => true
 *
 * // Delete entire list
 * delete_list( list );
 * @endcode
 */


#ifndef LINKED_LIST_H
#define LINKED_LIST_H


#include "bool.h"


/**
 * The list_element struct is used for each element in the linked
 * list.
 */
typedef struct list_element {
  struct list_element *next; /**< Contains the link to the next element in the list. */
  void *data; /**< Holds the element's data, which can be a pointer to any kind of data. */
} list_element;


bool create_list( list_element **list );
bool insert_in_front( list_element **head, void *data );
bool insert_before( list_element **head, const void *sibling, void *data );
bool append_to_tail( list_element **head, void *data );
unsigned int list_length_of( const list_element *head );
bool delete_element( list_element **head, const void *data );
bool delete_list( list_element *head );


#endif // LINKED_LIST_H


/*
 * Local variables:
 * c-basic-offset: 2
 * indent-tabs-mode: nil
 * End:
 */