Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }