41 lines
988 B
C
41 lines
988 B
C
//
|
|
// Created by zemon on 14.07.2022.
|
|
//
|
|
|
|
#include <memory.h>
|
|
#include "SimpleIndelibleMalloc.h"
|
|
|
|
void SimpleIndelibleMalloc_Init(tSimpleIndelibleMalloc *env, uint8_t *buffer, size_t size) {
|
|
env->buffer = buffer;
|
|
env->size = size;
|
|
env->used = 0;
|
|
}
|
|
|
|
void SimpleIndelibleMalloc_Clear(tSimpleIndelibleMalloc *env) {
|
|
memset(env->buffer, 0, env->size);
|
|
}
|
|
|
|
static void *SimpleIndelibleMalloc_Get(tSimpleIndelibleMalloc *env, size_t len) {
|
|
if ((env->used + len) > env->size) {
|
|
return 0;
|
|
}
|
|
|
|
void *result = env->buffer + env->used;
|
|
env->used += len;
|
|
return result;
|
|
}
|
|
|
|
|
|
static void SimpleIndelibleMalloc_Free(tSimpleIndelibleMalloc *env, void *ptr) {
|
|
//do nothing, it's indelible
|
|
}
|
|
|
|
tMemAllocInterface SimpleIndelibleMalloc_GetInterface(tSimpleIndelibleMalloc *env) {
|
|
return (tMemAllocInterface) {
|
|
.env = env,
|
|
.free = (void *) SimpleIndelibleMalloc_Free,
|
|
.alloc = (void *) SimpleIndelibleMalloc_Get,
|
|
};
|
|
}
|
|
|