コード例 #1
0
        /** 隙間を埋める。使用リストの順序に合わせてバッファを入れ替える。
         */
        private static void GarbageCollectionSwapUseListOder(System.Collections.Generic.LinkedList <NODE> a_list_use, System.Collections.Generic.LinkedList <NODE> a_list_free, BUFFER[] a_buffer)
        {
            int t_max = a_list_use.Count;

            System.Collections.Generic.LinkedListNode <NODE> t_node = a_list_use.First;
            for (int ii = 0; ii < t_max; ii++)
            {
                if (t_node.Value.GetBufferIndex() != ii)
                {
                    System.Collections.Generic.LinkedListNode <NODE> t_node_next = t_node.Next;

                    //t_node : 未使用にすべきノード。
                    //t_node_find : 使用にすべきノード。

                    //インデックスがiiのノードを検索。使用リストから。
                    System.Collections.Generic.LinkedListNode <NODE> t_node_find = BufferNodeFind <NODE> .FindEequalIndexNode(a_list_use.First, ii);

                    if (t_node_find == null)
                    {
                        //インデックスがiiのノードを検索。未使用リストから。
                        t_node_find = BufferNodeFind <NODE> .FindEequalIndexNode(a_list_free.First, ii);
                    }

                    //バッファをスワップする。
                    SwapBuffer(t_node, t_node_find, a_buffer);

                    t_node = t_node_next;
                }
            }
        }
コード例 #2
0
        /** 隙間を埋める。
         */
        private static void GarbageCollection(System.Collections.Generic.LinkedList <NODE> a_list_use, System.Collections.Generic.LinkedList <NODE> a_list_free, BUFFER[] a_buffer)
        {
            int t_max = a_list_use.Count;

            //node
            System.Collections.Generic.LinkedListNode <NODE> t_node_use = BufferNodeFind <NODE> .FindGreaterEequalIndexNode(a_list_use.First, t_max);

            System.Collections.Generic.LinkedListNode <NODE> t_node_free = a_list_free.First;

            while (t_node_use != null)
            {
                //t_node_use : 未使用にすべきノード。
                //t_node_free : 使用にすべきノード。
                t_node_free = BufferNodeFind <NODE> .FindLessIndexNode(t_node_free, t_max);

                //バッファをスワップする。
                SwapBuffer(t_node_free, t_node_use, a_buffer);

                //次の未使用にすべきノード。
                t_node_use = BufferNodeFind <NODE> .FindGreaterEequalIndexNode(t_node_use, t_max);
            }
        }