Snapdragon® Telematics Application Framework (TelAF) Interface Specification
le_doublyLinkedList.h
Go to the documentation of this file.
1 
186 #ifndef LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
187 #define LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
188 
189 
190 //--------------------------------------------------------------------------------------------------
199 //--------------------------------------------------------------------------------------------------
200 typedef struct le_dls_Link
201 {
202  struct le_dls_Link* nextPtr;
203  struct le_dls_Link* prevPtr;
204 }
206 
207 
208 //--------------------------------------------------------------------------------------------------
215 //--------------------------------------------------------------------------------------------------
216 typedef struct
217 {
219 }
221 
222 
223 //--------------------------------------------------------------------------------------------------
229 //--------------------------------------------------------------------------------------------------
231 
232 
233 //--------------------------------------------------------------------------------------------------
238 //--------------------------------------------------------------------------------------------------
239 #define LE_DLS_LIST_DECL_INIT {NULL}
240 
241 //--------------------------------------------------------------------------------------------------
246 //--------------------------------------------------------------------------------------------------
247 #define LE_DLS_LIST_INIT (le_dls_List_t)LE_DLS_LIST_DECL_INIT
248 
249 
250 //--------------------------------------------------------------------------------------------------
255 //--------------------------------------------------------------------------------------------------
256 #define LE_DLS_LINK_INIT (le_dls_Link_t){NULL, NULL}
257 
258 
259 //--------------------------------------------------------------------------------------------------
263 //--------------------------------------------------------------------------------------------------
264 void le_dls_Stack
265 (
266  le_dls_List_t* listPtr,
267  le_dls_Link_t* newLinkPtr
268 );
269 
270 
271 //--------------------------------------------------------------------------------------------------
275 //--------------------------------------------------------------------------------------------------
276 void le_dls_Queue
277 (
278  le_dls_List_t* listPtr,
279  le_dls_Link_t* newLinkPtr
280 );
281 
282 
283 //--------------------------------------------------------------------------------------------------
288 //--------------------------------------------------------------------------------------------------
289 void le_dls_AddAfter
290 (
291  le_dls_List_t* listPtr,
292  le_dls_Link_t* currentLinkPtr,
293  le_dls_Link_t* newLinkPtr
294 );
295 
296 
297 //--------------------------------------------------------------------------------------------------
302 //--------------------------------------------------------------------------------------------------
303 void le_dls_AddBefore
304 (
305  le_dls_List_t* listPtr,
306  le_dls_Link_t* currentLinkPtr,
307  le_dls_Link_t* newLinkPtr
308 );
309 
310 
311 //--------------------------------------------------------------------------------------------------
319 //--------------------------------------------------------------------------------------------------
321 (
322  le_dls_List_t* listPtr
323 );
324 
325 
326 //--------------------------------------------------------------------------------------------------
334 //--------------------------------------------------------------------------------------------------
336 (
337  le_dls_List_t* listPtr
338 );
339 
340 
341 //--------------------------------------------------------------------------------------------------
346 //--------------------------------------------------------------------------------------------------
347 void le_dls_Remove
348 (
349  le_dls_List_t* listPtr,
350  le_dls_Link_t* linkToRemovePtr
351 );
352 
353 
354 //--------------------------------------------------------------------------------------------------
362 //--------------------------------------------------------------------------------------------------
364 (
365  const le_dls_List_t* listPtr
366 );
367 
368 
369 //--------------------------------------------------------------------------------------------------
377 //--------------------------------------------------------------------------------------------------
379 (
380  const le_dls_List_t* listPtr
381 );
382 
383 
384 //--------------------------------------------------------------------------------------------------
391 //--------------------------------------------------------------------------------------------------
393 (
394  const le_dls_List_t* listPtr
395 )
396 //--------------------------------------------------------------------------------------------------
397 {
398  return (le_dls_Peek(listPtr) == NULL);
399 }
400 
401 
402 //--------------------------------------------------------------------------------------------------
413 //--------------------------------------------------------------------------------------------------
415 (
416  const le_dls_List_t* listPtr,
417  const le_dls_Link_t* currentLinkPtr
418 );
419 
420 
421 //--------------------------------------------------------------------------------------------------
431 //--------------------------------------------------------------------------------------------------
433 (
434  const le_dls_List_t* listPtr,
435  const le_dls_Link_t* currentLinkPtr
436 );
437 
438 
439 //--------------------------------------------------------------------------------------------------
444 //--------------------------------------------------------------------------------------------------
445 void le_dls_Swap
446 (
447  le_dls_List_t* listPtr,
448  le_dls_Link_t* linkPtr,
449  le_dls_Link_t* otherLinkPtr
450 );
451 
452 
453 //--------------------------------------------------------------------------------------------------
457 //--------------------------------------------------------------------------------------------------
458 void le_dls_Sort
459 (
460  le_dls_List_t* listPtr,
461  le_dls_LessThanFunc_t comparatorPtr
462 );
463 
464 
465 //--------------------------------------------------------------------------------------------------
473 //--------------------------------------------------------------------------------------------------
474 bool le_dls_IsInList
475 (
476  const le_dls_List_t* listPtr,
477  const le_dls_Link_t* linkPtr
478 );
479 
480 
481 //--------------------------------------------------------------------------------------------------
489 //--------------------------------------------------------------------------------------------------
491 (
492  const le_dls_List_t* listPtr,
493  const le_dls_Link_t* linkPtr
494 )
495 {
496  return (le_dls_Peek(listPtr) == linkPtr);
497 }
498 
499 
500 //--------------------------------------------------------------------------------------------------
508 //--------------------------------------------------------------------------------------------------
510 (
511  const le_dls_List_t* listPtr,
512  const le_dls_Link_t* linkPtr
513 )
514 {
515  return (le_dls_PeekTail(listPtr) == linkPtr);
516 }
517 
518 
519 //--------------------------------------------------------------------------------------------------
526 //--------------------------------------------------------------------------------------------------
527 size_t le_dls_NumLinks
528 (
529  const le_dls_List_t* listPtr
530 );
531 
532 
533 //--------------------------------------------------------------------------------------------------
541 //--------------------------------------------------------------------------------------------------
543 (
544  const le_dls_List_t* listPtr
545 );
546 
547 //--------------------------------------------------------------------------------------------------
551 //--------------------------------------------------------------------------------------------------
552 #define LE_DLS_FOREACH(listPtr, iteratorPtr, type, member) \
553  for ((iteratorPtr) = CONTAINER_OF(le_dls_Peek(listPtr), type, member); \
554  &((iteratorPtr)->member); \
555  (iteratorPtr) = CONTAINER_OF(le_dls_PeekNext((listPtr),&((iteratorPtr)->member)), \
556  type, member))
557 
558 
559 #endif // LEGATO_DOUBLY_LINKED_LIST_INCLUDE_GUARD
bool le_dls_IsInList(const le_dls_List_t *listPtr, const le_dls_Link_t *linkPtr)
size_t le_dls_NumLinks(const le_dls_List_t *listPtr)
void le_dls_Remove(le_dls_List_t *listPtr, le_dls_Link_t *linkToRemovePtr)
le_dls_Link_t * le_dls_PeekPrev(const le_dls_List_t *listPtr, const le_dls_Link_t *currentLinkPtr)
void le_dls_Swap(le_dls_List_t *listPtr, le_dls_Link_t *linkPtr, le_dls_Link_t *otherLinkPtr)
struct le_dls_Link * nextPtr
Next link pointer.
Definition: le_doublyLinkedList.h:202
Definition: le_doublyLinkedList.h:200
le_dls_Link_t * le_dls_Pop(le_dls_List_t *listPtr)
LE_DECLARE_INLINE bool le_dls_IsHead(const le_dls_List_t *listPtr, const le_dls_Link_t *linkPtr)
Definition: le_doublyLinkedList.h:491
bool(* le_dls_LessThanFunc_t)(le_dls_Link_t *a, le_dls_Link_t *b)
Definition: le_doublyLinkedList.h:230
LE_DECLARE_INLINE bool le_dls_IsEmpty(const le_dls_List_t *listPtr)
Definition: le_doublyLinkedList.h:393
void le_dls_AddAfter(le_dls_List_t *listPtr, le_dls_Link_t *currentLinkPtr, le_dls_Link_t *newLinkPtr)
void le_dls_Queue(le_dls_List_t *listPtr, le_dls_Link_t *newLinkPtr)
le_dls_Link_t * headLinkPtr
Link to list head.
Definition: le_doublyLinkedList.h:218
Definition: le_doublyLinkedList.h:216
le_dls_Link_t * le_dls_PeekTail(const le_dls_List_t *listPtr)
le_dls_Link_t * le_dls_Peek(const le_dls_List_t *listPtr)
#define LE_DECLARE_INLINE
Definition: le_basics.h:330
void le_dls_AddBefore(le_dls_List_t *listPtr, le_dls_Link_t *currentLinkPtr, le_dls_Link_t *newLinkPtr)
le_dls_Link_t * le_dls_PopTail(le_dls_List_t *listPtr)
struct le_dls_Link * prevPtr
Previous link pointer.
Definition: le_doublyLinkedList.h:203
void le_dls_Stack(le_dls_List_t *listPtr, le_dls_Link_t *newLinkPtr)
le_dls_Link_t * le_dls_PeekNext(const le_dls_List_t *listPtr, const le_dls_Link_t *currentLinkPtr)
bool le_dls_IsListCorrupted(const le_dls_List_t *listPtr)
void le_dls_Sort(le_dls_List_t *listPtr, le_dls_LessThanFunc_t comparatorPtr)
LE_DECLARE_INLINE bool le_dls_IsTail(const le_dls_List_t *listPtr, const le_dls_Link_t *linkPtr)
Definition: le_doublyLinkedList.h:510