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