GenericList
Description
The generic linked list. Not meant to be directly used by user code.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
List.c:12:
#include <Misra/Std/Memory.h>
void deinit_list(GenericList *list, u64 item_size) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:25:
bool insert_into_list(GenericList *list, const void *item_data, u64 item_size, u64 idx) {
GenericListNode *new_node;
GenericListNode *next_node;- In
List.c:95:
}
void remove_range_list(GenericList *list, void *removed_data, u64 item_size, u64 start, u64 count) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:172:
bool list_sort(GenericList *list, u64 item_size, GenericCompare comp) {
GenericListNode *node;
void *data;- In
List.c:219:
void swap_list(GenericList *list, u64 item_size, u64 idx1, u64 idx2) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:248:
void reverse_list(GenericList *list, u64 item_size) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:262:
bool push_arr_list(GenericList *list, u64 item_size, const void *arr, u64 count) {
const u8 *cursor;
u64 old_length;- In
List.c:301:
bool merge_list(GenericList *list1, u64 item_size, GenericList *list2) {
GenericListNode *node;
u64 old_length;- In
List.c:332:
void clear_list(GenericList *list, u64 item_size) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:343:
GenericListNode *node_at_list(GenericList *list, u64 item_size, u64 idx) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:362:
void *item_ptr_at_list(GenericList *list, u64 item_size, u64 idx) {
if (!list || !item_size) {
LOG_FATAL("invalid arguments.");- In
List.c:377:
}
size find_idx_list(GenericList *list, const void *item_data, u64 item_size, GenericCompare comp) {
if (!list || !item_data || !item_size || !comp) {
LOG_FATAL("invalid arguments.");- In
List.c:400:
// consistency. Memoized via MAGIC_VALIDATED_BIT; every mutator that
// touches head/tail/length flips the bit at the end of its work.
static void validate_list_structural(const GenericList *l) {
if (!l->allocator) {
LOG_FATAL("List allocator pointer is NULL.");- In
List.c:427:
}
void validate_list(const GenericList *l) {
if (!l) {
LOG_FATAL("List pointer is NULL.");- In
List.c:438:
}
validate_list_structural(l);
((GenericList *)(void *)l)->__magic &= ~MAGIC_VALIDATED_BIT;
}- In
List.c:467:
}
GenericListNode *get_node_random_access(GenericList *list, GenericListNode *node, u64 nidx, i64 ridx) {
if (!list || !node) {
LOG_FATAL("Invalid arguments");- In
List.c:517:
}
GenericListNode *get_node_for_list_iteration(GenericList *list, GenericListNode *node, u64 nidx, u64 target_idx) {
if (!list) {
LOG_FATAL("Invalid arguments");- In
List.c:550:
}
bool list_insert_one_l(GenericList *list, const void *item_copy, void *source, u64 item_size, u64 idx) {
return list_zero_source_on_success(list, source, item_size, insert_into_list(list, item_copy, item_size, idx));
}- In
List.c:554:
}
bool list_insert_one_r(GenericList *list, const void *item_copy, u64 item_size, u64 idx) {
return insert_into_list(list, item_copy, item_size, idx);
}- In
List.c:558:
}
bool list_insert_range_l(GenericList *list, void *items, u64 item_size, u64 count) {
if (!count) {
return true;- In
List.c:577:
}
bool list_insert_range_r(GenericList *list, const void *items, u64 item_size, u64 count) {
if (!count) {
return true;- In
List.c:589:
}
bool list_merge_l(GenericList *dst, GenericList *src, u64 item_size) {
if (!src->length) {
return true;- In
List.c:597:
}
bool list_merge_r(GenericList *dst, GenericList *src, u64 item_size) {
if (!src->length) {
return true;- In
List.Insert.c:29:
}
static bool list_matches(GenericList *list, const int *expected, size count) {
if (ListLen(list) != count) {
return false;- In
List.Foreach.c:7:
#include "../Util/TestRunner.h"
static bool list_matches(GenericList *list, const int *expected, size count) {
if (ListLen(list) != count) {
return false;- In
List.Ops.c:34:
}
static bool list_matches(GenericList *list, const int *expected, size count) {
if (ListLen(list) != count) {
return false;- In
List.Access.c:14:
}
static bool list_matches(GenericList *list, const int *expected, size count) {
if (ListLen(list) != count) {
return false;- In
List.Remove.c:29:
}
static bool list_matches(GenericList *list, const int *expected, size count) {
if (ListLen(list) != count) {
return false; GenericListNode node = {0};
List(int) list = ListInit(get_test_alloc());
GenericList *g = GENERIC_LIST(&list);
// intentional bypass: ListHead/ListTail/ListLen are read-only; plant
GenericListNode node = {.next = NULL, .prev = NULL, .data = &value};
List(int) list = ListInit(get_test_alloc());
GenericList *g = GENERIC_LIST(&list);
// intentional bypass: ListHead/ListTail/ListLen are read-only; plant
GenericListNode node = {.next = NULL, .prev = (GenericListNode *)1, .data = &value};
List(int) list = ListInit(get_test_alloc());
GenericList *g = GENERIC_LIST(&list);
// intentional bypass: ListHead/ListTail/ListLen are read-only; plant a
GenericListNode node = {.next = (GenericListNode *)1, .prev = NULL, .data = &value};
List(int) list = ListInit(get_test_alloc());
GenericList *g = GENERIC_LIST(&list);
// intentional bypass: ListHead/ListTail/ListLen are read-only; plant a
- In
Type.h:43:
Allocator *allocator;
u64 __magic;
} GenericList;
///
- In
Type.h:50:
/// TAGS: List, Generic, Cast
///
#define GENERIC_LIST(list) ((GenericList *)(void *)(list))
///
- In
Type.h:130:
/// TAGS: List, Validate, API
///
#define ValidateList(l) validate_list((const GenericList *)GENERIC_LIST(l))
#endif // MISRA_STD_CONTAINER_LIST_TYPE_H
Last updated on