Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 #include "azure_c_shared_utility/doublylinkedlist.h"
XinZhangMS 0:f7f1f0d76dd6 5
XinZhangMS 0:f7f1f0d76dd6 6 void
XinZhangMS 0:f7f1f0d76dd6 7 DList_InitializeListHead(
XinZhangMS 0:f7f1f0d76dd6 8 PDLIST_ENTRY ListHead
XinZhangMS 0:f7f1f0d76dd6 9 )
XinZhangMS 0:f7f1f0d76dd6 10 {
XinZhangMS 0:f7f1f0d76dd6 11 /* Codes_SRS_DLIST_06_005: [DList_InitializeListHead will initialize the Flink & Blink to the address of the DLIST_ENTRY.] */
XinZhangMS 0:f7f1f0d76dd6 12 ListHead->Flink = ListHead->Blink = ListHead;
XinZhangMS 0:f7f1f0d76dd6 13 return;
XinZhangMS 0:f7f1f0d76dd6 14 }
XinZhangMS 0:f7f1f0d76dd6 15
XinZhangMS 0:f7f1f0d76dd6 16 int
XinZhangMS 0:f7f1f0d76dd6 17 DList_IsListEmpty(
XinZhangMS 0:f7f1f0d76dd6 18 const PDLIST_ENTRY ListHead
XinZhangMS 0:f7f1f0d76dd6 19 )
XinZhangMS 0:f7f1f0d76dd6 20 {
XinZhangMS 0:f7f1f0d76dd6 21 /* Codes_SRS_DLIST_06_003: [DList_IsListEmpty shall return a non-zero value if there are no DLIST_ENTRY's on this list other than the list head.] */
XinZhangMS 0:f7f1f0d76dd6 22 /* Codes_SRS_DLIST_06_004: [DList_IsListEmpty shall return 0 if there is one or more items in the list.] */
XinZhangMS 0:f7f1f0d76dd6 23 return (ListHead->Flink == ListHead);
XinZhangMS 0:f7f1f0d76dd6 24 }
XinZhangMS 0:f7f1f0d76dd6 25
XinZhangMS 0:f7f1f0d76dd6 26 int
XinZhangMS 0:f7f1f0d76dd6 27 DList_RemoveEntryList(
XinZhangMS 0:f7f1f0d76dd6 28 PDLIST_ENTRY Entry
XinZhangMS 0:f7f1f0d76dd6 29 )
XinZhangMS 0:f7f1f0d76dd6 30 {
XinZhangMS 0:f7f1f0d76dd6 31 /* Codes_SRS_DLIST_06_008: [DList_RemoveEntryList shall remove a listEntry from whatever list it is properly part of.] */
XinZhangMS 0:f7f1f0d76dd6 32 /* Codes_SRS_DLIST_06_009: [The remaining list is properly formed.] */
XinZhangMS 0:f7f1f0d76dd6 33 /* Codes_SRS_DLIST_06_010: [DList_RemoveEntryList shall return non-zero if the remaining list is empty.] */
XinZhangMS 0:f7f1f0d76dd6 34 /* Codes_SRS_DLIST_06_011: [DList_RemoveEntryList shall return zero if the remaining list is NOT empty.] */
XinZhangMS 0:f7f1f0d76dd6 35 PDLIST_ENTRY Blink;
XinZhangMS 0:f7f1f0d76dd6 36 PDLIST_ENTRY Flink;
XinZhangMS 0:f7f1f0d76dd6 37
XinZhangMS 0:f7f1f0d76dd6 38 Flink = Entry->Flink;
XinZhangMS 0:f7f1f0d76dd6 39 Blink = Entry->Blink;
XinZhangMS 0:f7f1f0d76dd6 40 Blink->Flink = Flink;
XinZhangMS 0:f7f1f0d76dd6 41 Flink->Blink = Blink;
XinZhangMS 0:f7f1f0d76dd6 42 return (Flink == Blink);
XinZhangMS 0:f7f1f0d76dd6 43 }
XinZhangMS 0:f7f1f0d76dd6 44
XinZhangMS 0:f7f1f0d76dd6 45 PDLIST_ENTRY
XinZhangMS 0:f7f1f0d76dd6 46 DList_RemoveHeadList(
XinZhangMS 0:f7f1f0d76dd6 47 PDLIST_ENTRY ListHead
XinZhangMS 0:f7f1f0d76dd6 48 )
XinZhangMS 0:f7f1f0d76dd6 49 {
XinZhangMS 0:f7f1f0d76dd6 50 /* Codes_SRS_DLIST_06_012: [DList_RemoveHeadList removes the oldest entry from the list defined by the listHead parameter and returns a pointer to that entry.] */
XinZhangMS 0:f7f1f0d76dd6 51 /* Codes_SRS_DLIST_06_013: [DList_RemoveHeadList shall return listHead if that's the only item in the list.] */
XinZhangMS 0:f7f1f0d76dd6 52
XinZhangMS 0:f7f1f0d76dd6 53 PDLIST_ENTRY Flink;
XinZhangMS 0:f7f1f0d76dd6 54 PDLIST_ENTRY Entry;
XinZhangMS 0:f7f1f0d76dd6 55
XinZhangMS 0:f7f1f0d76dd6 56 Entry = ListHead->Flink;
XinZhangMS 0:f7f1f0d76dd6 57 Flink = Entry->Flink;
XinZhangMS 0:f7f1f0d76dd6 58 ListHead->Flink = Flink;
XinZhangMS 0:f7f1f0d76dd6 59 Flink->Blink = ListHead;
XinZhangMS 0:f7f1f0d76dd6 60 return Entry;
XinZhangMS 0:f7f1f0d76dd6 61 }
XinZhangMS 0:f7f1f0d76dd6 62
XinZhangMS 0:f7f1f0d76dd6 63
XinZhangMS 0:f7f1f0d76dd6 64
XinZhangMS 0:f7f1f0d76dd6 65 void
XinZhangMS 0:f7f1f0d76dd6 66 DList_InsertTailList(
XinZhangMS 0:f7f1f0d76dd6 67 PDLIST_ENTRY ListHead,
XinZhangMS 0:f7f1f0d76dd6 68 PDLIST_ENTRY Entry
XinZhangMS 0:f7f1f0d76dd6 69 )
XinZhangMS 0:f7f1f0d76dd6 70 {
XinZhangMS 0:f7f1f0d76dd6 71 PDLIST_ENTRY Blink;
XinZhangMS 0:f7f1f0d76dd6 72
XinZhangMS 0:f7f1f0d76dd6 73 /* Codes_SRS_DLIST_06_006: [DListInsertTailList shall place the DLIST_ENTRY at the end of the list defined by the listHead parameter.] */
XinZhangMS 0:f7f1f0d76dd6 74 Blink = ListHead->Blink;
XinZhangMS 0:f7f1f0d76dd6 75 Entry->Flink = ListHead;
XinZhangMS 0:f7f1f0d76dd6 76 Entry->Blink = Blink;
XinZhangMS 0:f7f1f0d76dd6 77 Blink->Flink = Entry;
XinZhangMS 0:f7f1f0d76dd6 78 ListHead->Blink = Entry;
XinZhangMS 0:f7f1f0d76dd6 79 return;
XinZhangMS 0:f7f1f0d76dd6 80 }
XinZhangMS 0:f7f1f0d76dd6 81
XinZhangMS 0:f7f1f0d76dd6 82
XinZhangMS 0:f7f1f0d76dd6 83 void
XinZhangMS 0:f7f1f0d76dd6 84 DList_AppendTailList(
XinZhangMS 0:f7f1f0d76dd6 85 PDLIST_ENTRY ListHead,
XinZhangMS 0:f7f1f0d76dd6 86 PDLIST_ENTRY ListToAppend
XinZhangMS 0:f7f1f0d76dd6 87 )
XinZhangMS 0:f7f1f0d76dd6 88 {
XinZhangMS 0:f7f1f0d76dd6 89 /* Codes_SRS_DLIST_06_007: [DList_AppendTailList shall place the list defined by listToAppend at the end of the list defined by the listHead parameter.] */
XinZhangMS 0:f7f1f0d76dd6 90 PDLIST_ENTRY ListEnd = ListHead->Blink;
XinZhangMS 0:f7f1f0d76dd6 91
XinZhangMS 0:f7f1f0d76dd6 92 ListHead->Blink->Flink = ListToAppend;
XinZhangMS 0:f7f1f0d76dd6 93 ListHead->Blink = ListToAppend->Blink;
XinZhangMS 0:f7f1f0d76dd6 94 ListToAppend->Blink->Flink = ListHead;
XinZhangMS 0:f7f1f0d76dd6 95 ListToAppend->Blink = ListEnd;
XinZhangMS 0:f7f1f0d76dd6 96 return;
XinZhangMS 0:f7f1f0d76dd6 97 }
XinZhangMS 0:f7f1f0d76dd6 98
XinZhangMS 0:f7f1f0d76dd6 99
XinZhangMS 0:f7f1f0d76dd6 100 /*Codes_SRS_DLIST_02_002: [DList_InsertHeadList inserts a singular entry in the list having as head listHead after "head".]*/
XinZhangMS 0:f7f1f0d76dd6 101 void DList_InsertHeadList(PDLIST_ENTRY listHead, PDLIST_ENTRY entry)
XinZhangMS 0:f7f1f0d76dd6 102 {
XinZhangMS 0:f7f1f0d76dd6 103 entry->Blink = listHead;
XinZhangMS 0:f7f1f0d76dd6 104 entry->Flink = listHead->Flink;
XinZhangMS 0:f7f1f0d76dd6 105 listHead->Flink->Blink = entry;
XinZhangMS 0:f7f1f0d76dd6 106 listHead->Flink = entry;
XinZhangMS 0:f7f1f0d76dd6 107 }