public Element <T> GetNextElement() { if (m_seekHelper == null) { return(null); } Element <T> f_element = (Element <T>)(m_seekHelper); m_seekHelper = m_seekHelper.m_Next; return(f_element); }
public void InitPool(int p_initBlockMaxNum, bool p_autoAddPool = false) { if (p_initBlockMaxNum <= 0 || m_initFinished)//quan防止初始化传参错误或重复初始化 { return; } m_initBlockMaxNum = p_initBlockMaxNum; m_halfBlockMaxNum = (int)(p_initBlockMaxNum >> 1); m_halfBlockMaxNum = m_halfBlockMaxNum > 0 ? m_halfBlockMaxNum : m_initBlockMaxNum; ElementControl <T>[] f_elements = new ElementControl <T> [p_initBlockMaxNum]; InitBlock(null, f_elements, m_initBlockMaxNum); m_blocksList.Add(f_elements); m_initFinished = true; m_autoAddPool = p_autoAddPool; }
private void PushIdleList(ElementControl <T> p_element) { if (m_elementIdleHead == null)//you空返回 { m_elementIdleHead = m_elementIdleTail = p_element; p_element.m_Ahead = null; p_element.m_Next = null; } else { p_element.m_Ahead = null; p_element.m_Next = m_elementIdleHead; m_elementIdleHead.m_Ahead = p_element; m_elementIdleHead = p_element; } }
private void PushBusyList(ElementControl <T> p_element) { if (p_element == null)//suo空返回 { return; } if (m_elementBusyHead == null) { m_elementBusyHead = m_elementBusyTail = p_element; p_element.m_Ahead = null; p_element.m_Next = null; } else { p_element.m_Ahead = null; p_element.m_Next = m_elementBusyHead; m_elementBusyHead.m_Ahead = p_element; m_elementBusyHead = p_element; } }
public void ClearAllBusy() { if (m_elementBusyHead == null) { return; } m_currentBusyCount = 0; if (m_elementIdleTail == null) { m_elementIdleHead = m_elementBusyHead; m_elementIdleTail = m_elementBusyTail; } else { m_elementIdleTail.m_Next = m_elementBusyHead; m_elementBusyHead.m_Ahead = m_elementIdleTail; m_elementIdleTail = m_elementBusyTail; } m_elementBusyHead = null; m_elementBusyTail = null; }
private ElementControl <T> PopBusyList(ElementControl <T> p_element) { if (p_element != m_elementBusyHead) { p_element.m_Ahead.m_Next = p_element.m_Next; } else { m_elementBusyHead = m_elementBusyHead.m_Next; } if (p_element != m_elementBusyTail) { p_element.m_Next.m_Ahead = p_element.m_Ahead; } else { m_elementBusyTail = m_elementBusyTail.m_Ahead; } p_element.m_Ahead = null; p_element.m_Next = null; return(p_element); }
private void InitBlock(ElementControl <T> p_parentNode, ElementControl <T>[] p_elementBlock, int p_numCache) { int len = p_elementBlock.Length; if (len < 0) { return; } for (int i = 0; i < len; i++) { if (p_elementBlock[i] == null) { p_elementBlock[i] = new ElementControl <T>(); } p_elementBlock[i].m_Next = null; if (i + 1 < len) { if (p_elementBlock[i + 1] == null) { p_elementBlock[i + 1] = new ElementControl <T>(); } p_elementBlock[i + 1].m_Ahead = p_elementBlock[i]; p_elementBlock[i].m_Next = p_elementBlock[i + 1]; } } m_elementIdleHead = p_elementBlock[0]; m_elementIdleTail = p_elementBlock[p_numCache - 1]; p_elementBlock[0].m_Ahead = null; p_elementBlock[p_numCache - 1].m_Next = null; if (p_parentNode != null) { p_elementBlock[0].m_Ahead = p_parentNode; p_parentNode.m_Next = p_elementBlock[0]; } }
private ElementControl <T> PopIdleList(ElementControl <T> p_element) { if (p_element == null) { if (!m_autoAddPool) { return(null); } if (m_halfBlockMaxNum <= 0) { m_halfBlockMaxNum = 20; } ElementControl <T>[] f_elements = new ElementControl <T> [m_halfBlockMaxNum]; InitBlock(null, f_elements, m_halfBlockMaxNum); m_blocksList.Add(f_elements); p_element = m_elementIdleHead; } if (p_element != m_elementIdleHead) { p_element.m_Ahead.m_Next = p_element.m_Next; } else { m_elementIdleHead = m_elementIdleHead.m_Next; } if (p_element != m_elementIdleTail) { p_element.m_Next.m_Ahead = p_element.m_Ahead; } else { m_elementIdleTail = m_elementIdleTail.m_Ahead; } p_element.m_Ahead = null; p_element.m_Next = null; return(p_element); }