summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Utils/ListPool.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-03-10 14:07:40 +0800
committerchai <chaifix@163.com>2022-03-10 14:07:40 +0800
commit22891bf59032ba88262824255a706d652031384b (patch)
tree7595439ba9966c9402d37e37cee5e8cf098757d5 /Assets/Scripts/Utils/ListPool.cs
parent8b04ea73e540067f83870b61d89db4868fea5e8a (diff)
* move folder
Diffstat (limited to 'Assets/Scripts/Utils/ListPool.cs')
-rw-r--r--Assets/Scripts/Utils/ListPool.cs65
1 files changed, 0 insertions, 65 deletions
diff --git a/Assets/Scripts/Utils/ListPool.cs b/Assets/Scripts/Utils/ListPool.cs
deleted file mode 100644
index 9819aa48..00000000
--- a/Assets/Scripts/Utils/ListPool.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.Events;
-
-public static class ListPool<T>
-{
- public static List<T> Get()
- {
- return ListPool<T>.m_ListPool.Get();
- }
-
- public static void Release(List<T> toRelease)
- {
- ListPool<T>.m_ListPool.Release(toRelease);
- }
-
- private static readonly ObjectPool<List<T>> m_ListPool = new ObjectPool<List<T>>(null, delegate (List<T> l)
- {
- l.Clear();
- });
-}
-
-public class ObjectPool<T> where T : new()
-{
- private readonly Stack<T> m_Stack = new Stack<T>();
- private readonly UnityAction<T> m_ActionOnGet;
- private readonly UnityAction<T> m_ActionOnRelease;
-
- public int countAll { get; private set; }
- public int countActive { get { return countAll - countInactive; } }
- public int countInactive { get { return m_Stack.Count; } }
-
- public ObjectPool(UnityAction<T> actionOnGet, UnityAction<T> actionOnRelease)
- {
- m_ActionOnGet = actionOnGet;
- m_ActionOnRelease = actionOnRelease;
- }
-
- public T Get()
- {
- T element;
- if (m_Stack.Count == 0)
- {
- element = new T();
- countAll++;
- }
- else
- {
- element = m_Stack.Pop();
- }
- if (m_ActionOnGet != null)
- m_ActionOnGet(element);
- return element;
- }
-
- public void Release(T element)
- {
- if (m_Stack.Count > 0 && ReferenceEquals(m_Stack.Peek(), element))
- Debug.LogError("Internal error. Trying to destroy object that is already released to pool.");
- if (m_ActionOnRelease != null)
- m_ActionOnRelease(element);
- m_Stack.Push(element);
- }
-} \ No newline at end of file