/** 隙間を埋める。使用リストの順序に合わせてバッファを入れ替える。 */ 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; } } }
/** 隙間を埋める。 */ 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); } }