It is often important to determine if a list is empty. This can be done
in many ways, but only two are worth mentioning. If either the
lh_TailPred field is pointing to the list header or the ln_Succ field of
the lh_Head is NULL, then the list is empty.
In C, for example, these methods would be written as follows:
/* You can use this method... */
if (list->lh_TailPred == (struct Node *)list)
printf("list is empty\n");
/* Or you can use this method */
if (NULL == list->lh_Head->ln_Succ)
printf("list is empty\n");
In assembly code, if A0 points to the list header, these methods would be
written as follows:
; Use this method...
CMP.L LH_TAILPRED(A0),A0
BEQ list_is_empty
; Or use this method
MOVE.L LH_HEAD(A0),A1
TST.L LN_SUCC(A1)
BEQ list_is_empty
Because LH_HEAD and LN_SUCC are both zero offsets, the second case may be
simplified or optimized by your assembler.
[Back to Amiga Developer Docs]