using DirectX.Common; using GlitchyEngine.Core; using System.Collections; using System; namespace GlitchyEngine { static { /// Releases the reference to destination, writes newValue into it and adds a reference to newValue. public static mixin SetReference(T destination, T newValue) where T: RefCounter { var oldDest = destination; destination = newValue; destination?.AddRef(); oldDest?.ReleaseRef(); } /// Releases the reference to destination, writes newValue into it and adds a reference to newValue. public static mixin SetReferenceVar(T destination, T newValue) where T: var { var oldDest = destination; destination = newValue; destination?.AddRef(); oldDest?.Release(); } /// Releases the reference to value and nullifies it. public static mixin ReleaseRefAndNullify(T value) where T: RefCounter { value?.ReleaseRef(); value = null; } public static mixin DeleteContainerAndReleaseItems(var container) { if (container != null) { for (var value in container) value?.ReleaseRef(); delete container; } } public static mixin ClearAndReleaseItems(var container) { for (var value in container) value?.ReleaseRef(); container.Clear(); } public static mixin DeleteDictionaryAndReleaseValues(var container) { if (container != null) { for (var value in container) { value.value?.ReleaseRef(); } delete container; } } } }