diff --git a/source/numem/core/memory/alloc.d b/source/numem/core/memory/alloc.d index 517aa8b..4c099f1 100644 --- a/source/numem/core/memory/alloc.d +++ b/source/numem/core/memory/alloc.d @@ -11,7 +11,7 @@ private extern (D) alias fp_t = void function (Object); Destroy element with a destructor. */ @trusted -void destruct(T)(ref T obj_) { +void destruct(T, bool doFree=true)(ref T obj_) { static if (isPointer!T || is(T == class)) { if (obj_ !is null) { @@ -36,8 +36,10 @@ void destruct(T)(ref T obj_) { } } - free(cast(void*)obj_); - obj_ = null; + static if (doFree) { + free(cast(void*)obj_); + obj_ = null; + } } } else { diff --git a/source/numem/core/memory/package.d b/source/numem/core/memory/package.d index 3c0bdce..4a25c85 100644 --- a/source/numem/core/memory/package.d +++ b/source/numem/core/memory/package.d @@ -209,12 +209,12 @@ T* nogc_new(T)(T value = T.init) if (isBasicType!T) { For structs this will call the struct's destructor if it has any. */ -void nogc_delete(T)(ref T obj_) { +void nogc_delete(T, bool doFree=true)(ref T obj_) { // Tracing debug(trace) dbg_dealloc(obj_); - destruct(obj_); + destruct!(T, doFree)(obj_); } /** diff --git a/source/numem/platform.d b/source/numem/platform.d index 7e9e7ae..d554ee7 100644 --- a/source/numem/platform.d +++ b/source/numem/platform.d @@ -10,8 +10,10 @@ */ module numem.platform; -version(OSX) version = AppleOS; -else version(iOS) version = AppleOS; -else version(TVOS) version = AppleOS; -else version(WatchOS) version = AppleOS; -else version(VisionOS) version = AppleOS; \ No newline at end of file +mixin template CheckOS() { + version(OSX) version = AppleOS; + else version(iOS) version = AppleOS; + else version(TVOS) version = AppleOS; + else version(WatchOS) version = AppleOS; + else version(VisionOS) version = AppleOS; +} \ No newline at end of file diff --git a/source/numem/sync/semaphore.d b/source/numem/sync/semaphore.d index f59b46b..5936ec0 100644 --- a/source/numem/sync/semaphore.d +++ b/source/numem/sync/semaphore.d @@ -15,6 +15,8 @@ import numem.core.memory; import core.sync.exception; import core.time : convert; +mixin CheckOS; + version(Windows) { import core.sys.windows.basetsd;