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)
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); 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; 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; 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); 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);
static bool test_list_node_relative_null_fails(void) {
WriteFmt("Testing ListNodeRelative with NULL node\n");
ListNodeRelative(NULL, 1); WriteFmt("Testing ListNodeRelative with NULL node\n");
ListNodeRelative(NULL, 1);
return false;
}
Last updated on