from rust
This commit is contained in:
parent
32203fadc0
commit
ee06c94d7e
8 changed files with 599 additions and 323 deletions
33
source/xdiff_init.d
Normal file
33
source/xdiff_init.d
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue