axle OS
x86_32 UNIX-like hobby OS
array_l.h
1 #ifndef STD_ARRAY_L_H
2 #define STD_ARRAY_L_H
3 
4 #include "std_base.h"
5 #include "panic.h"
6 #include <stdint.h>
7 #include "std.h"
8 
9 __BEGIN_DECLS
10 
11 typedef void* type_t;
12 
13 typedef struct array_l_item {
14  type_t item;
15  struct array_l_item* next;
16 } array_l_item;
17 
18 typedef struct {
19  array_l_item* head;
20  int32_t size;
21 } array_l;
22 
23 //create array list
24 STDAPI array_l* array_l_create();
25 
26 //destroy array list
27 STDAPI void array_l_destroy(array_l* array);
28 
29 //add item to array list
30 STDAPI void array_l_insert(array_l* array, type_t item);
31 
32 //lookup item at index idx
33 __attribute__((always_inline))
34 inline type_t array_l_lookup(array_l* array, int32_t idx) {
35  ASSERT(idx < array->size && idx >= 0, "index (%d) was out of bounds (%d)", idx, array->size - 1);
36 
37  //walk list
38  array_l_item* tmp = array->head;
39  for (int i = 0; i < idx; i++) {
40  tmp = tmp->next;
41  }
42  if (tmp) {
43  return tmp->item;
44  }
45  return NULL;
46 }
47 
48 //find index of item
49 STDAPI int32_t array_l_index(array_l* array, type_t item);
50 
51 //deletes item at location i from the array
52 STDAPI void array_l_remove(array_l* array, int32_t i);
53 
54 __END_DECLS
55 
56 #endif
Definition: array_l.h:13
Definition: array_l.h:18
Definition: elf.h:10
Definition: size.h:4