opuntiaOS - an operating system targeting x86 and ARMv7
at master 1.3 kB view raw
1/* 2 * Copyright (C) 2020-2022 The opuntiaOS Project Authors. 3 * + Contributed by Nikita Melekhin <nimelehin@gmail.com> 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#ifndef _KERNEL_ALGO_DYNAMIC_ARRAY_H 10#define _KERNEL_ALGO_DYNAMIC_ARRAY_H 11 12#include <libkern/types.h> 13 14// TODO: Speed up bucket search using binary jumps. 15struct dynamic_array_bucket { 16 void* data; 17 struct dynamic_array_bucket* next; 18 size_t capacity; 19 size_t size; 20}; 21typedef struct dynamic_array_bucket dynamic_array_bucket_t; 22 23struct dynamic_array { 24 dynamic_array_bucket_t* head; 25 dynamic_array_bucket_t* tail; 26 size_t size; /* number of elements in vector */ 27 size_t element_size; /* size of elements in bytes */ 28}; 29typedef struct dynamic_array dynamic_array_t; 30 31#define dynarr_init(type, v) dynarr_init_of_size_impl(v, sizeof(type), 8) 32#define dynarr_init_of_size(type, v, cap) dynarr_init_of_size_impl(v, sizeof(type), cap) 33 34int dynarr_init_of_size_impl(dynamic_array_t* v, size_t element_size, size_t capacity); 35int dynarr_free(dynamic_array_t* v); 36 37void* dynarr_get(dynamic_array_t* v, int index); 38void* dynarr_push(dynamic_array_t* v, void* element); 39int dynarr_pop(dynamic_array_t* v); 40int dynarr_clear(dynamic_array_t* v); 41 42#endif // _KERNEL_ALGO_DYNAMIC_ARRAY_H