Landtiger LPC1768 C BigLib 1
A self made, custom C library for the LandTiger board.
 
Loading...
Searching...
No Matches
cl_list.h
Go to the documentation of this file.
1#ifndef __CL_LIST_H
2#define __CL_LIST_H
3
4#include "allocator.h"
5#include "cl_types.h"
6#include "types.h"
7
8#include <stdbool.h>
9
10// FORWARD DECLARATIONS
11typedef struct __List CL_List;
12
13// MACROS
14
20#define CL_LIST_FOREACH(__type, __name, __list, ...) \
21 for (u32 __i = 0; __i < CL_ListSize(__list); __i++) \
22 { \
23 __type __name; \
24 CL_ListGet(__list, __i, &(__name)); \
25 __VA_ARGS__ \
26 }
27
33#define CL_LIST_FOREACH_PTR(__type, __name, __list, ...) \
34 for (u32 __i = 0; __i < CL_ListSize(__list); __i++) \
35 { \
36 __type *const __name; \
37 CL_ListGetPtr(__list, __i, (void **)&(__name)); \
38 __VA_ARGS__ \
39 }
40
41// FUNCTIONS
42
47CL_List *CL_ListAlloc(MEM_Allocator *const alloc, u32 elem_sz);
48
52void CL_ListFree(CL_List *const list);
53
58CL_Error CL_ListPushBack(CL_List *const list, const void *const elem);
59
64CL_Error CL_ListPushFront(CL_List *const list, const void *const elem);
65
69void CL_ListPopBack(CL_List *const list, void *out_elem);
70
74void CL_ListPopFront(CL_List *const list, void *out_elem);
75
82CL_Error CL_ListGet(const CL_List *const list, u32 index, void *out_elem);
83
90CL_Error CL_ListGetPtr(const CL_List *const list, u32 index, void **out_elem);
91
96CL_Error CL_ListGetLast(const CL_List *const list, void *out_elem);
97
102CL_Error CL_ListGetLastPtr(const CL_List *const list, void **out_elem);
103
110CL_Error CL_ListInsertAt(CL_List *const list, u32 index, const void *const elem);
111
118CL_Error CL_ListRemoveAt(CL_List *const list, u32 index, void *out_elem);
119
126bool CL_ListSearch(const CL_List *const list, const void *const elem, CL_CompareFn compare_fn, u32 *out_index);
127
130void CL_ListClear(CL_List *const list);
131
135u32 CL_ListSize(const CL_List *const list);
136
140bool CL_ListIsEmpty(const CL_List *const list);
141
142#endif
CL_Error CL_ListGetLastPtr(const CL_List *const list, void **out_elem)
Gets the last element from the list as a pointer, so the user can modify it.
Definition cl_list.c:216
void CL_ListPopFront(CL_List *const list, void *out_elem)
Removes the first element from the list, optionally returning it.
Definition cl_list.c:146
CL_Error CL_ListRemoveAt(CL_List *const list, u32 index, void *out_elem)
Removes an element at the specified index.
Definition cl_list.c:260
void CL_ListPopBack(CL_List *const list, void *out_elem)
Removes the last element from the list, optionally returning it.
Definition cl_list.c:124
void CL_ListClear(CL_List *const list)
Removes all elements from the list.
Definition cl_list.c:316
CL_Error CL_ListGetLast(const CL_List *const list, void *out_elem)
Gets the last element from the list.
Definition cl_list.c:204
bool CL_ListSearch(const CL_List *const list, const void *const elem, CL_CompareFn compare_fn, u32 *out_index)
Searches for an element in the list.
Definition cl_list.c:294
u32 CL_ListSize(const CL_List *const list)
Gets the number of elements in the list.
Definition cl_list.c:334
CL_Error CL_ListPushBack(CL_List *const list, const void *const elem)
Adds an element at the end of the list.
Definition cl_list.c:80
bool CL_ListIsEmpty(const CL_List *const list)
Checks if the list is empty.
Definition cl_list.c:339
void CL_ListFree(CL_List *const list)
Frees the memory previously assigned to the list.
Definition cl_list.c:63
CL_Error CL_ListGetPtr(const CL_List *const list, u32 index, void **out_elem)
Gets an element at the specified index as a pointer, so the user can modify it.
Definition cl_list.c:186
CL_List * CL_ListAlloc(MEM_Allocator *const alloc, u32 elem_sz)
Initializes a new doubly-linked list with tail, with the allocated memory provided by the user.
Definition cl_list.c:43
CL_Error CL_ListPushFront(CL_List *const list, const void *const elem)
Adds an element at the front of the list.
Definition cl_list.c:102
CL_Error CL_ListGet(const CL_List *const list, u32 index, void *out_elem)
Gets an element at the specified index.
Definition cl_list.c:168
CL_Error CL_ListInsertAt(CL_List *const list, u32 index, const void *const elem)
Inserts an element at the specified index.
Definition cl_list.c:228
int(* CL_CompareFn)(const void *, const void *)
A function pointer type for comparing two elements.
Definition cl_types.h:7
CL_Error
Specify this in the size parameter of the collections initialization to tell the library that the num...
Definition cl_types.h:24
uint32_t u32
Definition types.h:6