Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
 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;
     }
 }
Пример #4
0
 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;
     }
 }
Пример #5
0
 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;
 }
Пример #6
0
 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);
 }
Пример #7
0
        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];
            }
        }
Пример #8
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);
 }