using System; using System.Runtime.CompilerServices; namespace AlicizaX { public static partial class MemoryPool { private static bool _enableStrictCheck; private static int _strictCheckVersion; public static bool EnableStrictCheck { get => _enableStrictCheck; set { if (_enableStrictCheck == value) return; _enableStrictCheck = value; _strictCheckVersion++; } } internal static int StrictCheckVersion => _strictCheckVersion; public static int Count => MemoryPoolRegistry.Count; #if UNITY_EDITOR public static MemoryPoolInfo[] GetAllMemoryPoolInfos() { return MemoryPoolRegistry.GetAllInfos(); } #endif public static int GetAllMemoryPoolInfos(MemoryPoolInfo[] infos) { return MemoryPoolRegistry.GetAllInfos(infos); } public static void ClearAll() { MemoryPoolRegistry.ClearAll(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T Acquire() where T : class, IMemory, new() { return MemoryPool.Acquire(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IMemory Acquire(Type memoryType) { return MemoryPoolRegistry.Acquire(memoryType); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Release(T memory) where T : class, IMemory, new() { MemoryPool.Release(memory); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Release(IMemory memory) { MemoryPoolRegistry.Release(memory); } public static void Add(int count) where T : class, IMemory, new() { MemoryPool.Prewarm(count); } public static void Add(Type memoryType, int count) { MemoryPoolRegistry.Prewarm(memoryType, count); } public static void Remove(int count) where T : class, IMemory, new() { int target = MemoryPool.UnusedCount - count; MemoryPool.Shrink(target); } public static void Remove(Type memoryType, int count) { MemoryPoolRegistry.RemoveFromType(memoryType, count); } public static void RemoveAll() where T : class, IMemory, new() { MemoryPool.ClearAll(); } public static void SetCapacity(int softCapacity, int hardCapacity) where T : class, IMemory, new() { MemoryPool.SetCapacity(softCapacity, hardCapacity); } public static void Compact() where T : class, IMemory, new() { MemoryPool.Compact(); } public static void Compact(Type memoryType) { MemoryPoolRegistry.CompactType(memoryType); } public static void CompactAll() { MemoryPoolRegistry.CompactAll(); } public static void RemoveAll(Type memoryType) { MemoryPoolRegistry.ClearType(memoryType); } } }