from rust

This commit is contained in:
Alexander Zhirov 2025-08-31 16:47:55 +03:00
parent 32203fadc0
commit 1f00cff032
Signed by: alexander
GPG key ID: C8D8BE544A27C511
8 changed files with 598 additions and 323 deletions

33
source/xdiff_init.d Normal file
View file

@ -0,0 +1,33 @@
module xdiff_init;
import core.stdc.stdlib : malloc, free, realloc;
import std.exception : enforce;
import xdiff; // твой низкоуровневый биндинг (xdiff.d)
extern (C) private void* wrap_malloc(void*, uint size) { return malloc(size); }
extern (C) private void wrap_free (void*, void* p) { free(p); }
extern (C) private void* wrap_realloc(void*, void* p, uint size){ return realloc(p, size); }
void ensureInit()
{
// локальная статика инициализируется один раз на процесс
static bool done = false;
if (done) return;
memallocator_t m;
m.priv = null;
m.malloc = &wrap_malloc;
m.free = &wrap_free;
m.realloc = &wrap_realloc;
enforce(xdl_set_allocator(&m) == 0, "xdl_set_allocator failed");
done = true;
}
mmfile_t initMmfile(size_t len)
{
ensureInit();
mmfile_t mf;
enforce(xdl_init_mmfile(&mf, cast(long)len, XDL_MMF_ATOMIC) == 0, "xdl_init_mmfile failed");
return mf;
}