My fork of X_NUCLEO_IDB0XA1

Fork of X_NUCLEO_IDB0XA1 by ST

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ble_list.c Source File

ble_list.c

00001 /******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
00002 * File Name          : ble_list.c
00003 * Author             : AMS - HEA&RF BU
00004 * Version            : V1.0.0
00005 * Date               : 19-July-2012
00006 * Description        : Circular Linked List Implementation.
00007 ********************************************************************************
00008 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
00009 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
00010 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
00011 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
00012 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
00013 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
00014 *******************************************************************************/
00015 
00016 /******************************************************************************
00017  * Include Files
00018 ******************************************************************************/
00019 #include <ble_hal_types.h>
00020 #include "ble_list.h"
00021 
00022 /******************************************************************************
00023  * Function Definitions 
00024 ******************************************************************************/
00025 void list_init_head (tListNode * listHead)
00026 {
00027     listHead->next = listHead;
00028     listHead->prev = listHead;  
00029 }
00030 
00031 uint8_t list_is_empty (tListNode * listHead)
00032 {
00033     return ((listHead->next == listHead)? TRUE:FALSE);
00034 }
00035 
00036 void list_insert_head (tListNode * listHead, tListNode * node)
00037 {
00038     node->next = listHead->next;
00039     node->prev = listHead;
00040     listHead->next = node;
00041     (node->next)->prev = node;
00042 }
00043 
00044 
00045 void list_insert_tail (tListNode * listHead, tListNode * node)
00046 {
00047     node->next = listHead;
00048     node->prev = listHead->prev;
00049     listHead->prev = node;
00050     (node->prev)->next = node;
00051 }
00052 
00053 
00054 void list_remove_node (tListNode * node)
00055 {
00056     (node->prev)->next = node->next;
00057     (node->next)->prev = node->prev;
00058 }
00059 
00060 
00061 void list_remove_head (tListNode * listHead, tListNode ** node )
00062 {
00063     *node = listHead->next;
00064     list_remove_node (listHead->next);
00065     (*node)->next = NULL;
00066     (*node)->prev = NULL;
00067 }
00068 
00069 
00070 void list_remove_tail (tListNode * listHead, tListNode ** node )
00071 {
00072     *node = listHead->prev;
00073     list_remove_node (listHead->prev);
00074     (*node)->next = NULL;
00075     (*node)->prev = NULL;
00076 }
00077 
00078 
00079 void list_insert_node_after (tListNode * node, tListNode * ref_node)
00080 {
00081     node->next = ref_node->next;
00082     node->prev = ref_node;
00083     ref_node->next = node;
00084     (node->next)->prev = node;
00085 }
00086 
00087 
00088 void list_insert_node_before (tListNode * node, tListNode * ref_node)
00089 {
00090     node->next = ref_node;
00091     node->prev = ref_node->prev;
00092     ref_node->prev = node;
00093     (node->prev)->next = node;
00094 }
00095 
00096 
00097 int list_get_size (tListNode * listHead)
00098 {
00099     int size = 0;
00100     tListNode * temp = listHead->next;
00101     while (temp != listHead)
00102     {
00103         size++;
00104         temp = temp->next;      
00105     }
00106     return (size);
00107 }
00108 
00109 void list_get_next_node (tListNode * ref_node, tListNode ** node)
00110 {
00111     *node = ref_node->next;
00112 }
00113 
00114 
00115 void list_get_prev_node (tListNode * ref_node, tListNode ** node)
00116 {
00117     *node = ref_node->prev;
00118 }