49 lines
1.2 KiB
Zig
49 lines
1.2 KiB
Zig
|
const std = @import("std");
|
||
|
const Allocator = std.mem.Allocator;
|
||
|
const flipperzero = @import("flipperzero.zig");
|
||
|
const c = flipperzero.c;
|
||
|
|
||
|
pub const FuriAllocator = struct {
|
||
|
fn alloc(
|
||
|
_: *anyopaque,
|
||
|
len: usize,
|
||
|
log2_align: u8,
|
||
|
return_address: usize,
|
||
|
) ?[*]u8 {
|
||
|
_ = return_address;
|
||
|
const alignment = @as(usize, 1) << @intCast(log2_align);
|
||
|
return @ptrCast(c.aligned_malloc(len, alignment));
|
||
|
}
|
||
|
|
||
|
fn resize(
|
||
|
_: *anyopaque,
|
||
|
buf: []u8,
|
||
|
log2_buf_align: u8,
|
||
|
new_len: usize,
|
||
|
return_address: usize,
|
||
|
) bool {
|
||
|
_ = return_address;
|
||
|
_ = log2_buf_align;
|
||
|
return new_len <= buf.len;
|
||
|
}
|
||
|
|
||
|
fn free(
|
||
|
_: *anyopaque,
|
||
|
buf: []u8,
|
||
|
log2_buf_align: u8,
|
||
|
return_address: usize,
|
||
|
) void {
|
||
|
_ = return_address;
|
||
|
_ = log2_buf_align;
|
||
|
c.aligned_free(buf.ptr);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const furi_allocator_vtable = Allocator.VTable{
|
||
|
.alloc = FuriAllocator.alloc,
|
||
|
.resize = FuriAllocator.resize,
|
||
|
.free = FuriAllocator.free,
|
||
|
};
|
||
|
|
||
|
pub const furi_allocator = Allocator{ .ptr = undefined, .vtable = &furi_allocator_vtable };
|