4.1.7 Set rest

To update ``the rest'' of a list using an array implementation is also clumsy. The interface of this operation is simple:

void List_setrest(struct List *pList, struct List *pRest);

The difficult part is the updating of the array pointed to by the array element of the list pointed to by pList. There are two main scenarios. For discussion purposes, let _pList and _pRest be the (struct _List *) casted version of pList and pRest, respectively.

In the first scenario, _pList->array != _pRest->array. In this case, we need to copy elements from _pRest->array[_pRest->index] to _pList->array[_pList->index+1], terminating only when we reach the size of _pRest->array. Then, we need to resize _pList->array according if its original size is larger.

In the second scenario, _pList->array == _pRest->array. This means both _pList (the destination) and _pRest (the source) utilize the same array. Copying a section of an array to another section of the same array requires care, specially when the source range overlaps with the destination range.

Regardless of the relationship of _pList->array and _pRest->array, an array implementation involves a lot of copy operations that consumes processing resources.



Copyright © 2006-09-27 by Tak Auyeung