SAM3S8/SD8 Software Package: examples_usb/usb_hid_transfer/HIDTest/list.h Source File

SAM3S8/SD8 Software Package 1.2

# list.h

    00001 /*++
    00002
    00003 Copyright (c) Microsoft 1998, All Rights Reserved
    00004
    00005 Module Name:
    00006
    00007     list.h
    00008
    00009 Abstract:
    00010
    00011     This module contains the code for manipulating list structures.
    00012
    00013 Environment:
    00014
    00015     User mode
    00016
    00017 Revision History:
    00018
    00019     Nov-97 : Created
    00020
    00021 --*/
    00022
    00023
    00024 #ifndef __LIST_H__
    00025 #define __LIST_H__
    00026
    00027 #include <windows.h>
    00028
    00029 typedef LIST_ENTRY      LIST_NODE_HDR, *PLIST_NODE_HDR;
    00030 typedef LIST_NODE_HDR   LIST, *PLIST;
    00031
    00032 typedef VOID PLIST_CALLBACK(PLIST_NODE_HDR);
    00033
    00034 VOID
    00035 InitializeList(
    00036     IN  PLIST   NewList
    00037 );
    00038
    00039 VOID
    00040 InsertHead(
    00041     IN  PLIST           List,
    00042     IN  PLIST_NODE_HDR  ListNode
    00043 );
    00044
    00045 VOID
    00046 InsertTail(
    00047     IN  PLIST           List,
    00048     IN  PLIST_NODE_HDR  ListNode
    00049 );
    00050
    00051 VOID
    00052 RemoveNode(
    00053     IN  PLIST_NODE_HDR  ListNode
    00054 );
    00055
    00056 PLIST_NODE_HDR
    00057 RemoveHead(
    00058     IN  PLIST   List
    00059 );
    00060
    00061 PLIST_NODE_HDR
    00062 RemoveTail(
    00063     IN  PLIST   List
    00064 );
    00065
    00066 BOOL
    00067 IsListEmpty(
    00068     IN  PLIST   List
    00069 );
    00070
    00071 PLIST_NODE_HDR
    00072 GetListHead(
    00073     IN  PLIST   List
    00074 );
    00075
    00076 PLIST_NODE_HDR
    00077 GetListTail(
    00078     IN  PLIST   List
    00079 );
    00080
    00081 PLIST_NODE_HDR
    00082 GetNextEntry(
    00083     IN  PLIST_NODE_HDR  ListNode
    00084 );
    00085
    00086 PLIST_NODE_HDR
    00087 GetPrevEntry(
    00088     IN  PLIST_NODE_HDR  ListNode
    00089 );
    00090
    00091 VOID
    00092 DestroyListNoCallback(
    00093     IN  PLIST           List
    00094 );
    00095
    00096 VOID
    00097 DestroyListWithCallback(
    00098     IN  PLIST           List,
    00099     IN  PLIST_CALLBACK  Callback
    00100 );
    00101
    00102
    00103 /*****************************************************************************
    00104 /* Macro definitions of list functions
    00105 /*****************************************************************************/
    00106
    00107     /*
    00108     // VOID
    00109     // InitializeList(
    00110     //     IN  PLIST    NewList
    00111     // );
    00112     */
    00113
    00114     #define InitializeList(nl) \
    00115         { ((PLIST)(nl)) -> Flink = ((PLIST)(nl)) -> Blink = nl; }
    00116
    00117     /*
    00118     // VOID
    00119     // InsertHead(
    00120      /     IN  PLIST            List,
    00121     //     IN  PLIST_NODE_HDR   ListNode
    00122     // );
    00123     */
    00124
    00125     #define InsertHead(List, Node) {                    \
    00126         PLIST_NODE_HDR _EX_Flink;                       \
    00127         PLIST_NODE_HDR _EX_List;                        \
    00128                                                         \
    00129         _EX_List = ((PLIST_NODE_HDR) (List));           \
    00130         _EX_Flink = _EX_List -> Flink;                  \
    00131         ((PLIST_NODE_HDR) (Node))->Blink = _EX_List;    \
    00132         ((PLIST_NODE_HDR) (Node))->Flink = _EX_Flink;   \
    00133         _EX_Flink->Blink = (((PLIST_NODE_HDR) (Node))); \
    00134         _EX_List->Flink = ((PLIST_NODE_HDR) (Node));    \
    00135     }
    00136
    00137
    00138     /*
    00139     // VOID
    00140     // InsertTail(
    00141     //     IN  PLIST            List,
    00142     //     IN  PLIST_NODE_HDR   ListNode
    00143     // );
    00144     */
    00145
    00146     #define InsertTail(List, Node) {                    \
    00147         PLIST_NODE_HDR _EX_Blink;                       \
    00148         PLIST_NODE_HDR _EX_List;                        \
    00149                                                         \
    00150         _EX_List = ((PLIST_NODE_HDR) (List));           \
    00151         _EX_Blink = _EX_List->Blink;                    \
    00152         ((PLIST_NODE_HDR) (Node))->Flink = _EX_List;    \
    00153         ((PLIST_NODE_HDR) (Node))->Blink = _EX_Blink;   \
    00154         _EX_Blink->Flink = (((PLIST_NODE_HDR) (Node))); \
    00155         _EX_List->Blink = ((PLIST_NODE_HDR) (Node));    \
    00156     }
    00157
    00158     /*
    00159     //  VOID
    00160     //  RemoveNode(
    00161     //      IN  PLIST_NODE_HDR  ListNode
    00162     //  );
    00163     */
    00164
    00165     #define RemoveNode(node) {                          \
    00166         PLIST_NODE_HDR _EX_Blink;                       \
    00167         PLIST_NODE_HDR _EX_Flink;                       \
    00168                                                         \
    00169         _EX_Flink = ((PLIST_NODE_HDR) (node))->Flink;   \
    00170         _EX_Blink = ((PLIST_NODE_HDR) (node))->Blink;   \
    00171         _EX_Blink->Flink = _EX_Flink;                   \
    00172         _EX_Flink->Blink = _EX_Blink;                   \
    00173     }
    00174
    00175
    00176     /*
    00177     // PLIST_NODE_HDR
    00178     // RemoveHead(
    00179     //     IN  PLIST    List
    00180     // );
    00181     */
    00182
    00183     #define RemoveHead(List)                            \
    00184         GetListHead((List));                            \
    00185         RemoveNode(((PLIST_NODE_HDR) (List))->Flink)
    00186
    00187     /*
    00188     // PLIST_NODE_HDR
    00189     // RemoveTail(
    00190     //     IN  PLIST    List
    00191     // );
    00192     */
    00193
    00194     #define RemoveTail(List)                            \
    00195         GetListTail((List));                            \
    00196         RemoveNode(((PLIST_NODE_HDR) (List))->Blink)
    00197
    00198     /*
    00199     // BOOL
    00200     // IsListEmpty(
    00201     //     IN  PLIST    List
    00202     // );
    00203     */
    00204
    00205     #define IsListEmpty(List)                           \
    00206         (((PLIST_NODE_HDR) (List))->Flink == ((PLIST_NODE_HDR) (List)))
    00207
    00208     /*
    00209     // PLIST_NODE_HDR
    00210     // GetListHead(
    00211     //     IN  PLIST    List
    00212     // );
    00213     */
    00214
    00215     #define GetListHead(List)                           \
    00216         (((PLIST_NODE_HDR) (List))->Flink)
    00217
    00218     /*
    00219     // PLIST_NODE_HDR
    00220     // GetListTail(
    00221     //     IN  PLIST    List
    00222     // );
    00223     */
    00224
    00225     #define GetListTail(List)                           \
    00226         (((PLIST_NODE_HDR) (List))->Blink)
    00227
    00228
    00229     /*
    00230     // PLIST_NODE_HDR
    00231     // GetNextEntry(
    00232     //    IN  PLIST_NODE_HDR  ListNode
    00233     // );
    00234     */
    00235
    00236     #define GetNextEntry(ListNode)                      \
    00237         (((PLIST_NODE_HDR) (ListNode)) -> Flink);
    00238
    00239     /*
    00240     // PLIST_NODE_HDR
    00241     // GetPrevEntry(
    00242     //    IN  PLIST_NODE_HDR  ListNode
    00243     // );
    00244     */
    00245
    00246     #define GetPrevEntry(ListNode)                      \
    00247         (((PLIST_NODE_HDR) (ListNode)) -> Blink);
    00248
    00249     /*
    00250     // VOID
    00251     // DestroyListNoCallback(
    00252     //     IN  PLIST           List,
    00253     //     IN  PLIST_CALLBACK  Callback
    00254     // );
    00255     */
    00256
    00257     #define DestroyListNoCallback(list)                 \
    00258         PLIST_NODE_HDR  currNode;                       \
    00259                                                         \
    00260         while (!IsListEmpty((list))) {                  \
    00261             currNode = RemoveHead((list));              \
    00262         }                                               \
    00263     }
    00264
    00265     /*
    00266     // VOID
    00267     // DestroyListWithCallback(
    00268     //     IN  PLIST           List,
    00269     //     IN  PLIST_CALLBACK  Callback
    00270     // );
    00271     */
    00272
    00273     #define DestroyListWithCallback(list, cb) {         \
    00274         PLIST_NODE_HDR  currNode;                       \
    00275                                                         \
    00276         while (!IsListEmpty((list))) {                  \
    00277             currNode = RemoveHead((list));              \
    00278             (cb)(currNode);                             \
    00279         }                                               \
    00280     }
    00281
    00282 #endif
    00283

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines