-
Notifications
You must be signed in to change notification settings - Fork 0
/
CacheController.cs
93 lines (81 loc) · 2.17 KB
/
CacheController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public abstract class CacheController<T,Temp>
{
private LinkedList<T> enableList;
private LinkedList<T> AllList;
private LinkedList<T> BeUseList;
private Temp _m_tTemp;
private int _m_iMaxNum;
public CacheController(T _t, Temp _temp)
{
_m_tTemp = _temp;
enableList = new LinkedList<T>();
AllList = new LinkedList<T>();
BeUseList = new LinkedList<T>();
}
public void init(int _minNum, int _maxNum)
{
_m_iMaxNum = _maxNum;
if (_m_tTemp != null)
{
Debug.LogError("cachecontroller has been created.");
return;
}
for (int i =0; i<_minNum;i++)
{
T t = createItem(_m_tTemp);
AllList.AddLast(t);
enableList.AddLast(t);
}
}
public void discard()
{
for (int i =0;i<AllList.Count;i++)
{
T temp = AllList.First.Value;
discardItem(temp);
AllList.RemoveFirst();
}
AllList.Clear();
enableList.Clear();
BeUseList.Clear();
}
public T popItem()
{
if (enableList.Count > 0)
{
BeUseList.AddLast(enableList.First.Value);
enableList.RemoveFirst();
return BeUseList.Last.Value;
}
AllList.AddLast(createItem(_m_tTemp));
BeUseList.AddLast(AllList.Last.Value);
return BeUseList.Last.Value;
}
public void pushBackItem(T _t)
{
if (_t == null)
{
Debug.LogError("push back Item is null");
return;
}
BeUseList.Remove(_t);
if(AllList.Count > _m_iMaxNum)
{
Debug.LogError("discard" + _m_iMaxNum);
AllList.Remove(_t);
discardItem(_t);
}else
{
resetItem(_t);
enableList.AddLast(_t);
BeUseList.Remove(_t);
}
//Debug.LogWarning("已放回对象池");
}
public abstract void discardItem(T _t);
public abstract T createItem(Temp _temp);
public abstract void resetItem(T _t);
}