private LinkedListNode <KMemoryBlock> MergeEqualStateNeighbors(LinkedListNode <KMemoryBlock> node) { KMemoryBlock block = node.Value; if (node.Previous != null) { KMemoryBlock previousBlock = node.Previous.Value; if (BlockStateEquals(block, previousBlock)) { LinkedListNode <KMemoryBlock> previousNode = node.Previous; _blocks.Remove(node); previousBlock.AddPages(block.PagesCount); node = previousNode; block = previousBlock; } } if (node.Next != null) { KMemoryBlock nextBlock = node.Next.Value; if (BlockStateEquals(block, nextBlock)) { _blocks.Remove(node.Next); block.AddPages(nextBlock.PagesCount); } } return(node); }
private KMemoryBlock MergeEqualStateNeighbors(KMemoryBlock block) { KMemoryBlock previousBlock = block.Predecessor; KMemoryBlock nextBlock = block.Successor; if (previousBlock != null && BlockStateEquals(block, previousBlock)) { _blockTree.Remove(block); previousBlock.AddPages(block.PagesCount); block = previousBlock; } if (nextBlock != null && BlockStateEquals(block, nextBlock)) { _blockTree.Remove(nextBlock); block.AddPages(nextBlock.PagesCount); } return(block); }