ListNodeRelative
Description
Get the list node at signed offset ridx from base_node. Positive ridx walks forward through next pointers; negative walks backward through prev pointers. ridx == 0 returns base_node.
Parameters
| Name | Direction | Description |
|---|---|---|
base_node |
in | Anchor node. |
ridx |
in | Signed relative offset. |
Success
Returns the node at offset ridx.
Failure
Returns NULL when the offset walks past either end of the list.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Deadend.c:318:
static bool test_list_node_relative_null_fails(void) {
WriteFmt("Testing ListNodeRelative with NULL node\n");
ListNodeRelative(NULL, 1);- In
Deadend.c:320:
WriteFmt("Testing ListNodeRelative with NULL node\n");
ListNodeRelative(NULL, 1);
return false;
}- In
Access.c:136:
GenericListNode *begin = GENERIC_LIST_NODE(ListNodeBegin(&list));
GenericListNode *end = GENERIC_LIST_NODE(ListNodeEnd(&list));
GenericListNode *same = ListNodeRelative(ListNodeBegin(&list), 0);
GenericListNode *rel_f2 = ListNodeRelative(ListNodeBegin(&list), 2);
GenericListNode *rel_b2 = ListNodeRelative(ListNodeEnd(&list), -2);- In
Access.c:137:
GenericListNode *end = GENERIC_LIST_NODE(ListNodeEnd(&list));
GenericListNode *same = ListNodeRelative(ListNodeBegin(&list), 0);
GenericListNode *rel_f2 = ListNodeRelative(ListNodeBegin(&list), 2);
GenericListNode *rel_b2 = ListNodeRelative(ListNodeEnd(&list), -2);
ListNode(int) *null_node = NULL;- In
Access.c:138:
GenericListNode *same = ListNodeRelative(ListNodeBegin(&list), 0);
GenericListNode *rel_f2 = ListNodeRelative(ListNodeBegin(&list), 2);
GenericListNode *rel_b2 = ListNodeRelative(ListNodeEnd(&list), -2);
ListNode(int) *null_node = NULL;- In
Access.c:154:
result = result && rel_f2 && ListNodeData(rel_f2) && (*(int *)ListNodeData(rel_f2) == 30);
result = result && rel_b2 && ListNodeData(rel_b2) && (*(int *)ListNodeData(rel_b2) == 20);
result = result && (ListNodeRelative(ListNodeBegin(&list), -1) == NULL);
result = result && (ListNodeRelative(ListNodeEnd(&list), 1) == NULL);
result = result && (ListNodeNext(null_node) == NULL);- In
Access.c:155:
result = result && rel_b2 && ListNodeData(rel_b2) && (*(int *)ListNodeData(rel_b2) == 20);
result = result && (ListNodeRelative(ListNodeBegin(&list), -1) == NULL);
result = result && (ListNodeRelative(ListNodeEnd(&list), 1) == NULL);
result = result && (ListNodeNext(null_node) == NULL);
result = result && (ListNodePrev(null_node) == NULL);- In
Access.c:441:
// head; assert we get a real node carrying the head's value.
static bool test_relative_back_to_head_returns_head(void) {
WriteFmt("Testing ListNodeRelative back-walk landing on head\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Access.c:454:
// Tail is index 3 (value 40); -(len-1) = -3 lands exactly on head.
GenericListNode *head_via_back = ListNodeRelative(ListNodeEnd(&list), -3);
bool result = head_via_back != NULL;
Last updated on