blob: 424c11a6df0a9c0c24381a10f39f93b18a5c6e2d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#pragma once
#include "common.h"
#include "smrt_arena.h"
#define SLIDING_WINDOW_BASE_POS (sizeof(sliding_window_array_t))
// Data structure that allows infinite inserts allowing access to the last 'size' elements
typedef struct {
u64 size;
u64 num_elements;
u64 start_idx;
u64 element_size_bytes;
} sliding_window_array_t;
#define SMRTA_ALLOC_SLIDINGWINDOW(arena, T, n) (sliding_window_array_t*)sw_create((arena), sizeof(T), (n))
#define SLIDINGWINDOW_GET(w, T) ((T*)((u8*)(w) + SLIDING_WINDOW_BASE_POS) + (w)->start_idx)
sliding_window_array_t *sw_create(smrt_arena_t *arena, u64 elem_size, u64 size);
void sw_insert(sliding_window_array_t *sw, void *x);
|