00001 00176 #ifndef LEGATO_SINGLY_LINKED_LIST_INCLUDE_GUARD 00177 #define LEGATO_SINGLY_LINKED_LIST_INCLUDE_GUARD 00178 00179 00180 //-------------------------------------------------------------------------------------------------- 00189 //-------------------------------------------------------------------------------------------------- 00190 typedef struct le_sls_Link 00191 { 00192 struct le_sls_Link* nextPtr; 00193 } 00194 le_sls_Link_t; 00195 00196 00197 //-------------------------------------------------------------------------------------------------- 00204 //-------------------------------------------------------------------------------------------------- 00205 typedef struct 00206 { 00207 le_sls_Link_t* tailLinkPtr; 00208 } 00209 le_sls_List_t; 00210 00211 00212 //-------------------------------------------------------------------------------------------------- 00217 //-------------------------------------------------------------------------------------------------- 00218 #define LE_SLS_LIST_INIT (le_sls_List_t){NULL} 00219 00220 00221 //-------------------------------------------------------------------------------------------------- 00226 //-------------------------------------------------------------------------------------------------- 00227 #define LE_SLS_LINK_INIT (le_sls_Link_t){NULL} 00228 00229 00230 //-------------------------------------------------------------------------------------------------- 00234 //-------------------------------------------------------------------------------------------------- 00235 void le_sls_Stack 00236 ( 00237 le_sls_List_t* listPtr, 00238 le_sls_Link_t* newLinkPtr 00239 ); 00240 00241 00242 //-------------------------------------------------------------------------------------------------- 00246 //-------------------------------------------------------------------------------------------------- 00247 void le_sls_Queue 00248 ( 00249 le_sls_List_t* listPtr, 00250 le_sls_Link_t* newLinkPtr 00251 ); 00252 00253 00254 //-------------------------------------------------------------------------------------------------- 00259 //-------------------------------------------------------------------------------------------------- 00260 void le_sls_AddAfter 00261 ( 00262 le_sls_List_t* listPtr, 00263 le_sls_Link_t* currentLinkPtr, 00264 le_sls_Link_t* newLinkPtr 00265 ); 00266 00267 00268 //-------------------------------------------------------------------------------------------------- 00277 //-------------------------------------------------------------------------------------------------- 00278 le_sls_Link_t* le_sls_RemoveAfter 00279 ( 00280 le_sls_List_t* listPtr, 00281 le_sls_Link_t* currentLinkPtr 00282 00283 ); 00284 00285 00286 //-------------------------------------------------------------------------------------------------- 00294 //-------------------------------------------------------------------------------------------------- 00295 le_sls_Link_t* le_sls_Pop 00296 ( 00297 le_sls_List_t* listPtr 00298 ); 00299 00300 00301 //-------------------------------------------------------------------------------------------------- 00309 //-------------------------------------------------------------------------------------------------- 00310 le_sls_Link_t* le_sls_Peek 00311 ( 00312 const le_sls_List_t* listPtr 00313 ); 00314 00315 00316 //-------------------------------------------------------------------------------------------------- 00327 //-------------------------------------------------------------------------------------------------- 00328 le_sls_Link_t* le_sls_PeekNext 00329 ( 00330 const le_sls_List_t* listPtr, 00331 const le_sls_Link_t* currentLinkPtr 00332 ); 00333 00334 00335 //-------------------------------------------------------------------------------------------------- 00342 //-------------------------------------------------------------------------------------------------- 00343 static inline bool le_sls_IsEmpty 00344 ( 00345 const le_sls_List_t* listPtr 00346 ) 00347 //-------------------------------------------------------------------------------------------------- 00348 { 00349 return (le_sls_Peek(listPtr) == NULL); 00350 } 00351 00352 00353 //-------------------------------------------------------------------------------------------------- 00361 //-------------------------------------------------------------------------------------------------- 00362 bool le_sls_IsInList 00363 ( 00364 const le_sls_List_t* listPtr, 00365 const le_sls_Link_t* linkPtr 00366 ); 00367 00368 00369 //-------------------------------------------------------------------------------------------------- 00376 //-------------------------------------------------------------------------------------------------- 00377 size_t le_sls_NumLinks 00378 ( 00379 const le_sls_List_t* listPtr 00380 ); 00381 00382 00383 //-------------------------------------------------------------------------------------------------- 00391 //-------------------------------------------------------------------------------------------------- 00392 bool le_sls_IsListCorrupted 00393 ( 00394 const le_sls_List_t* listPtr 00395 ); 00396 00397 00398 #endif // LEGATO_SINGLY_LINKED_LIST_INCLUDE_GUARD 00399