aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/Pools/ObjectPool.cs
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Common/Pools/ObjectPool.cs
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Common/Pools/ObjectPool.cs')
-rw-r--r--Ryujinx.Common/Pools/ObjectPool.cs75
1 files changed, 0 insertions, 75 deletions
diff --git a/Ryujinx.Common/Pools/ObjectPool.cs b/Ryujinx.Common/Pools/ObjectPool.cs
deleted file mode 100644
index e0bf5df6..00000000
--- a/Ryujinx.Common/Pools/ObjectPool.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-using System.Threading;
-
-namespace Ryujinx.Common
-{
- public class ObjectPool<T>
- where T : class
- {
- private T _firstItem;
- private readonly T[] _items;
-
- private readonly Func<T> _factory;
-
- public ObjectPool(Func<T> factory, int size)
- {
- _items = new T[size - 1];
- _factory = factory;
- }
-
- public T Allocate()
- {
- T instance = _firstItem;
-
- if (instance == null || instance != Interlocked.CompareExchange(ref _firstItem, null, instance))
- {
- instance = AllocateInternal();
- }
-
- return instance;
- }
-
- private T AllocateInternal()
- {
- T[] items = _items;
-
- for (int i = 0; i < items.Length; i++)
- {
- T instance = items[i];
-
- if (instance != null && instance == Interlocked.CompareExchange(ref items[i], null, instance))
- {
- return instance;
- }
- }
-
- return _factory();
- }
-
- public void Release(T obj)
- {
- if (_firstItem == null)
- {
- _firstItem = obj;
- }
- else
- {
- ReleaseInternal(obj);
- }
- }
-
- private void ReleaseInternal(T obj)
- {
- T[] items = _items;
-
- for (int i = 0; i < items.Length; i++)
- {
- if (items[i] == null)
- {
- items[i] = obj;
- break;
- }
- }
- }
- }
-}