⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkedlist.h

📁 Upnp开发包文件
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef LINKED_LIST_H#define LINKED_LIST_H#include "FreeList.h"#ifdef __cplusplusextern "C" {#endif#define EOUTOFMEM (-7 & 1<<29)#define FREELISTSIZE 100#define LIST_SUCCESS 1#define LIST_FAIL 0/**************************************************************************** * Name: free_routine * *  Description: *     Function for freeing list items *****************************************************************************/typedef void (*free_function)(void *arg);/**************************************************************************** * Name: cmp_routine * *  Description: *     Function for comparing list items *     Returns 1 if itemA==itemB *****************************************************************************/typedef int (*cmp_routine)(void *itemA,void *itemB);/**************************************************************************** * Name: ListNode * *  Description: *      linked list node. stores generic item and pointers to next and prev. *      Internal Use Only. *****************************************************************************/typedef struct LISTNODE{  struct LISTNODE *prev; //previous node  struct LISTNODE *next; //next node  void *item; //item} ListNode;/**************************************************************************** * Name: LinkedList * *  Description: *      linked list (no protection). Internal Use Only. *      Because this is for internal use, parameters are NOT checked for  *      validity. *      The first item of the list is stored at node: head->next *      The last item of the list is stored at node: tail->prev *      If head->next=tail, then list is empty. *      To iterate through the list: * *       LinkedList g; *       ListNode *temp = NULL; *       for (temp = ListHead(g);temp!=NULL;temp = ListNext(g,temp)) *       { *        } * *****************************************************************************/typedef struct LINKEDLIST{  ListNode head; //head, first item is stored at: head->next  ListNode tail; //tail, last item is stored at: tail->prev  long size;      //size of list  FreeList freeNodeList; //free list to use  free_function free_func; //free function to use  cmp_routine cmp_func; //compare function to use} LinkedList;/**************************************************************************** * Function: ListInit * *  Description: *      Initializes LinkedList. Must be called first. *      And only once for List. *  Parameters: *      list  - must be valid, non null, pointer to a linked list. *      cmp_func - function used to compare items. (May be NULL) *      free_func - function used to free items. (May be NULL) *  Returns: *      0 on success, EOUTOFMEM on failure. *****************************************************************************/int ListInit(LinkedList *list,cmp_routine cmp_func, free_function free_func);/**************************************************************************** * Function: ListAddHead * *  Description: *      Adds a node to the head of the list. *      Node gets immediately after list.head. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      void * item - item to be added *  Returns: *      The pointer to the ListNode on success, NULL on failure. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode *ListAddHead(LinkedList *list, void *item);/**************************************************************************** * Function: ListAddTail * *  Description: *      Adds a node to the tail of the list. *      Node gets added immediately before list.tail. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      void * item - item to be added *  Returns: *      The pointer to the ListNode on success, NULL on failure. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode *ListAddTail(LinkedList *list, void *item);/**************************************************************************** * Function: ListAddAfter * *  Description: *      Adds a node after the specified node. *      Node gets added immediately after bnode. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      void * item - item to be added *      ListNode * bnode - node to add after *  Returns: *      The pointer to the ListNode on success, NULL on failure. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode *ListAddAfter(LinkedList *list, void *item, ListNode *bnode);/**************************************************************************** * Function: ListAddBefore * *  Description: *      Adds a node before the specified node. *      Node gets added immediately before anode. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      ListNode * anode  - node to add the in front of. *      void * item - item to be added *  Returns: *      The pointer to the ListNode on success, NULL on failure. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode *ListAddBefore(LinkedList *list,void *item, ListNode *anode);/**************************************************************************** * Function: ListDelNode * *  Description: *      Removes a node from the list *      The memory for the node is freed. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      ListNode *dnode - done to delete. *      freeItem - if !0 then item is freed using free function. *                 if 0 (or free function is NULL) then item is not freed *  Returns: *      The pointer to the item stored in the node or NULL if the item is freed. *  Precondition: *      The list has been initialized. *****************************************************************************/void *ListDelNode(LinkedList *list,ListNode *dnode, int freeItem);/**************************************************************************** * Function: ListDestroy * *  Description: *      Removes all memory associated with list nodes.  *      Does not free LinkedList *list.  *     *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      freeItem - if !0 then items are freed using the free_function. *                 if 0 (or free function is NULL) then items are not freed. *  Returns: *      0 on success. Always returns 0. *  Precondition: *      The list has been initialized. *****************************************************************************/int ListDestroy(LinkedList *list, int freeItem);/**************************************************************************** * Function: ListHead * *  Description: *      Returns the head of the list. *     *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *   *  Returns: *      The head of the list. NULL if list is empty. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode* ListHead(LinkedList *list);/**************************************************************************** * Function: ListTail * *  Description: *      Returns the tail of the list. *     *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *   *  Returns: *      The tail of the list. NULL if list is empty. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode* ListTail(LinkedList *list);/**************************************************************************** * Function: ListNext * *  Description: *      Returns the next item in the list. *     *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *   *  Returns: *      The next item in the list. NULL if there are no more items in list. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode* ListNext(LinkedList *list, ListNode * node);/**************************************************************************** * Function: ListPrev * *  Description: *      Returns the previous item in the list. *     *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *   *  Returns: *      The previous item in the list. NULL if there are no more items in list. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode* ListPrev(LinkedList *list, ListNode * node);/**************************************************************************** * Function: ListFind * *  Description: *      Finds the specified item in the list. *      Uses the compare function specified in ListInit. If compare function *      is NULL then compares items as pointers. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list. *      ListNode *start - the node to start from, NULL if to start from  *                        beginning. *      void * item - the item to search for. *  Returns: *      The node containing the item. NULL if no node contains the item. *  Precondition: *      The list has been initialized. *****************************************************************************/ListNode* ListFind(LinkedList *list, ListNode *start, void * item);/**************************************************************************** * Function: ListSize * *  Description: *     Returns the size of the list. *  Parameters: *      LinkedList *list  - must be valid, non null, pointer to a linked list.  *  Returns: *      The number of items in the list. *  Precondition: *      The list has been initialized. *****************************************************************************/int ListSize(LinkedList* list);#ifdef __cplusplus}#endif#endif //LINKED_LIST_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -