コード例 #1
0
 protected override void OnInstanced()
 {
     base.OnInstanced();
     //先变换类型,减少转换GC
     m_PtrUpdateActiveEntity      = UF_UpdateActiveEntity;
     m_PtrUpdatePoolEntity        = UF_UpdatePoolEntity;
     m_PtrFixedUpdateActiveEntity = UF_FixedUpdateActiveEntity;
 }
コード例 #2
0
ファイル: NPool.cs プロジェクト: moto2002/FrameLock
        private void UF_DoForeach(K key, DelegateNForeach <T> method)
        {
            if (!m_MapNodes.ContainsKey(key) || m_MapNodes[key] == null)
            {
                return;
            }
            if (method == null)
            {
                return;
            }

            Node <T> head = m_MapNodes[key];
            Node <T> node = head;
            Node <T> last = null;

            if (node.next == null)
            {
                if (!method(node.refer))
                {
                    this.UF_RecoverNode(node);
                    UF_DeleteKeys(key);
                }
                return;
            }
            last = node;

            while (node != null)
            {
                if (!method(node.refer))
                {
                    if (node == head)
                    {
                        m_MapNodes[key] = node.next;
                        head            = node.next;
                        node.next       = null;
                        UF_RecoverNode(node);
                        node = head;
                        last = node;
                    }
                    else
                    {
                        last.next = node.next;
                        node.next = null;
                        UF_RecoverNode(node);
                        node = last.next;
                    }
                }
                else
                {
                    last = node;
                    node = node.next;
                }
            }
        }
コード例 #3
0
ファイル: NList.cs プロジェクト: moto2002/FrameLock
        /// <summary>
        /// 清空全部节点
        /// </summary>
        public void UF_NForeachClear(DelegateNForeach <T> method)
        {
            Node <T> node = m_Head;

            while (node != null)
            {
                if (method != null)
                {
                    method(node.refer);
                }
                node = node.next;
            }
            UF_Clear();
        }
コード例 #4
0
ファイル: NPool.cs プロジェクト: moto2002/FrameLock
 public T UF_Select(K key, DelegateNForeach <T> method)
 {
     if (method != null && m_MapNodes.ContainsKey(key) && m_MapNodes [key] != null)
     {
         Node <T> node = m_MapNodes [key];
         while (node != null)
         {
             if (method(node.refer))
             {
                 return(node.refer);
             }
         }
     }
     return(default(T));
 }
コード例 #5
0
ファイル: NList.cs プロジェクト: moto2002/FrameLock
 //根据条件筛选
 public T UF_Select(DelegateNForeach <T> method)
 {
     if (method != null && m_Head != null)
     {
         Node <T> node = m_Head;
         while (node != null)
         {
             if (method(node.refer))
             {
                 return(node.refer);
             }
             node = node.next;
         }
     }
     return(default(T));
 }
コード例 #6
0
ファイル: NPool.cs プロジェクト: moto2002/FrameLock
 /// <summary>
 /// 清空全部节点
 /// </summary>
 public void UF_NForeachClear(DelegateNForeach <T> method)
 {
     foreach (K key in m_MapNodes.Keys)
     {
         Node <T> node = m_MapNodes[key];
         while (node != null)
         {
             if (method != null)
             {
                 method(node.refer);
             }
             node = node.next;
         }
     }
     UF_Clear();
 }
コード例 #7
0
ファイル: NList.cs プロジェクト: moto2002/FrameLock
        /// <summary>
        ///循环每个节点
        ///如果mehod 返回false,则删除该节点
        /// </summary>
        public void UF_NForeach(DelegateNForeach <T> method)
        {
            if (method == null || m_Head == null)
            {
                return;
            }
            Node <T> node = m_Head;
            Node <T> last = null;

            if (node.next == null)
            {
                if (!method(node.refer))
                {
                    this.UF_RecoverNode(node);
                    m_Head = null;
                }
                return;
            }

            last = node;
            while (node != null)
            {
                if (!method(node.refer))
                {
                    if (node == m_Head)
                    {
                        m_Head    = node.next;
                        node.next = null;
                        UF_RecoverNode(node);
                        node = m_Head;
                        last = node;
                    }
                    else
                    {
                        last.next = node.next;
                        node.next = null;
                        UF_RecoverNode(node);
                        node = last.next;
                    }
                }
                else
                {
                    last = node;
                    node = node.next;
                }
            }
        }
コード例 #8
0
ファイル: NPool.cs プロジェクト: moto2002/FrameLock
        /// <summary>
        ///循环每个节点
        ///如果mehod 返回false,则删除该节点
        /// </summary>
        public void UF_NForeach(DelegateNForeach <T> method)
        {
            if (method == null)
            {
                return;
            }
            List <K> tempList = ListCache <K> .Acquire();

            foreach (var item in m_MapNodes)
            {
                if (item.Value != null)
                {
                    tempList.Add(item.Key);
                }
            }
            for (int k = 0; k < tempList.Count; k++)
            {
                UF_DoForeach(tempList[k], method);
            }
            ListCache <K> .Release(tempList);
        }
コード例 #9
0
ファイル: NPool.cs プロジェクト: moto2002/FrameLock
 public void NForeach(K key, DelegateNForeach <T> method)
 {
     UF_DoForeach(key, method);
 }
コード例 #10
0
 //筛选选择
 public IEntityHnadle UF_Select(DelegateNForeach <IEntityHnadle> entity)
 {
     return(m_ListActive.UF_Select(entity));
 }