1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 * See "LICENSE_BSD2.txt" for details.
9 *
10 * @TAG(DATA61_BSD)
11 */
12
13#pragma once
14
15#include <stdlib.h>
16
17/* A K&R malloc style allocation that can be 'put in a box' as it were. */
18
19typedef union k_r_malloc_header {
20    struct {
21        union k_r_malloc_header *ptr;
22        size_t size;
23    } s;
24    /* Force alignment */
25    long long x;
26} k_r_malloc_header_t;
27
28typedef struct mspace_k_r_malloc {
29    k_r_malloc_header_t base;
30    k_r_malloc_header_t *freep;
31    size_t cookie;
32    k_r_malloc_header_t *(*morecore)(size_t cookie, struct mspace_k_r_malloc *k_r_malloc, size_t new_units);
33} mspace_k_r_malloc_t;
34
35void mspace_k_r_malloc_init(mspace_k_r_malloc_t *k_r_malloc, size_t cookie, k_r_malloc_header_t * (*morecore)(size_t cookie, mspace_k_r_malloc_t *k_r_malloc, size_t new_units));
36void *mspace_k_r_malloc_alloc(mspace_k_r_malloc_t *k_r_malloc, size_t nbytes);
37void mspace_k_r_malloc_free(mspace_k_r_malloc_t *k_r_malloc, void *ap);
38
39