framework/c/inc/le_doublyLinkedList.h
Go to the documentation of this file.
00001 
00191 #ifndef LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
00192 #define LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
00193 
00194 
00195 //--------------------------------------------------------------------------------------------------
00204 //--------------------------------------------------------------------------------------------------
00205 typedef struct le_dls_Link
00206 {
00207     struct le_dls_Link* nextPtr;       
00208     struct le_dls_Link* prevPtr;       
00209 }
00210 le_dls_Link_t;
00211 
00212 
00213 //--------------------------------------------------------------------------------------------------
00220 //--------------------------------------------------------------------------------------------------
00221 typedef struct
00222 {
00223     le_dls_Link_t* headLinkPtr;        
00224 }
00225 le_dls_List_t;
00226 
00227 
00228 //--------------------------------------------------------------------------------------------------
00233 //--------------------------------------------------------------------------------------------------
00234 #define LE_DLS_LIST_INIT (le_dls_List_t){NULL}
00235 
00236 
00237 //--------------------------------------------------------------------------------------------------
00242 //--------------------------------------------------------------------------------------------------
00243 #define LE_DLS_LINK_INIT (le_dls_Link_t){NULL, NULL}
00244 
00245 
00246 //--------------------------------------------------------------------------------------------------
00250 //--------------------------------------------------------------------------------------------------
00251 void le_dls_Stack
00252 (
00253     le_dls_List_t* listPtr,            
00254     le_dls_Link_t* newLinkPtr          
00255 );
00256 
00257 
00258 //--------------------------------------------------------------------------------------------------
00262 //--------------------------------------------------------------------------------------------------
00263 void le_dls_Queue
00264 (
00265     le_dls_List_t* listPtr,            
00266     le_dls_Link_t* newLinkPtr          
00267 );
00268 
00269 
00270 //--------------------------------------------------------------------------------------------------
00275 //--------------------------------------------------------------------------------------------------
00276 void le_dls_AddAfter
00277 (
00278     le_dls_List_t* listPtr,            
00279     le_dls_Link_t* currentLinkPtr,     
00280     le_dls_Link_t* newLinkPtr          
00281 );
00282 
00283 
00284 //--------------------------------------------------------------------------------------------------
00289 //--------------------------------------------------------------------------------------------------
00290 void le_dls_AddBefore
00291 (
00292     le_dls_List_t* listPtr,            
00293     le_dls_Link_t* currentLinkPtr,     
00294     le_dls_Link_t* newLinkPtr          
00295 );
00296 
00297 
00298 //--------------------------------------------------------------------------------------------------
00306 //--------------------------------------------------------------------------------------------------
00307 le_dls_Link_t* le_dls_Pop
00308 (
00309     le_dls_List_t* listPtr             
00310 );
00311 
00312 
00313 //--------------------------------------------------------------------------------------------------
00321 //--------------------------------------------------------------------------------------------------
00322 le_dls_Link_t* le_dls_PopTail
00323 (
00324     le_dls_List_t* listPtr             
00325 );
00326 
00327 
00328 //--------------------------------------------------------------------------------------------------
00333 //--------------------------------------------------------------------------------------------------
00334 void le_dls_Remove
00335 (
00336     le_dls_List_t* listPtr,             
00337     le_dls_Link_t* linkToRemovePtr      
00338 );
00339 
00340 
00341 //--------------------------------------------------------------------------------------------------
00349 //--------------------------------------------------------------------------------------------------
00350 le_dls_Link_t* le_dls_Peek
00351 (
00352     const le_dls_List_t* listPtr            
00353 );
00354 
00355 
00356 //--------------------------------------------------------------------------------------------------
00364 //--------------------------------------------------------------------------------------------------
00365 le_dls_Link_t* le_dls_PeekTail
00366 (
00367     const le_dls_List_t* listPtr            
00368 );
00369 
00370 
00371 //--------------------------------------------------------------------------------------------------
00378 //--------------------------------------------------------------------------------------------------
00379 static inline bool le_dls_IsEmpty
00380 (
00381     const le_dls_List_t* listPtr            
00382 )
00383 //--------------------------------------------------------------------------------------------------
00384 {
00385     return (le_dls_Peek(listPtr) == NULL);
00386 }
00387 
00388 
00389 //--------------------------------------------------------------------------------------------------
00400 //--------------------------------------------------------------------------------------------------
00401 le_dls_Link_t* le_dls_PeekNext
00402 (
00403     const le_dls_List_t* listPtr,           
00404     const le_dls_Link_t* currentLinkPtr     
00405 );
00406 
00407 
00408 //--------------------------------------------------------------------------------------------------
00418 //--------------------------------------------------------------------------------------------------
00419 le_dls_Link_t* le_dls_PeekPrev
00420 (
00421     const le_dls_List_t* listPtr,          
00422     const le_dls_Link_t* currentLinkPtr    
00423 );
00424 
00425 
00426 //--------------------------------------------------------------------------------------------------
00431 //--------------------------------------------------------------------------------------------------
00432 void le_dls_Swap
00433 (
00434     le_dls_List_t* listPtr,         
00435     le_dls_Link_t* linkPtr,         
00436     le_dls_Link_t* otherLinkPtr     
00437 );
00438 
00439 
00440 //--------------------------------------------------------------------------------------------------
00448 //--------------------------------------------------------------------------------------------------
00449 bool le_dls_IsInList
00450 (
00451     const le_dls_List_t* listPtr,    
00452     const le_dls_Link_t* linkPtr     
00453 );
00454 
00455 
00456 //--------------------------------------------------------------------------------------------------
00463 //--------------------------------------------------------------------------------------------------
00464 size_t le_dls_NumLinks
00465 (
00466     const le_dls_List_t* listPtr       
00467 );
00468 
00469 
00470 //--------------------------------------------------------------------------------------------------
00478 //--------------------------------------------------------------------------------------------------
00479 bool le_dls_IsListCorrupted
00480 (
00481     const le_dls_List_t* listPtr    
00482 );
00483 
00484 #endif  // LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
00485 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines