SAMV71 Xplained Ultra Software Package 1.4

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