Exemplo n.º 1
0
        public void Remove(TKey key, Func <KeyValuePair <TKey, TValue>, bool> filter)
        {
            if (BlockReference.BlockId != 0)
            {
                var blockId = BlockReference.BlockId;
                var root    = Node <TKey, TValue> .GetNode(Config, BlockReference.BlockId);

                root.Remove(key, filter,
                            added =>
                {
                    Config.Blocks.FreeBlock(blockId);
                    if (added.Count == 0)
                    {
                        BlockReference.BlockId = 0;
                    }
                    else if (added.Count == 1)
                    {
                        BlockReference.BlockId =
                            added[0].Value;
                    }
                    else
                    {
                        BlockReference.BlockId = InteriorNode
                                                 <TKey, TValue> .CreateRoot(
                            Config,
                            added
                            );
                    }
                });
            }
        }
Exemplo n.º 2
0
        public void Insert(TKey key, TValue value)
        {
            if (BlockReference.BlockId == 0)
            {
                BlockReference.BlockId = LeafNode <TKey, TValue> .CreateRoot(Config,
                                                                             new KeyValuePair <TKey, TValue>(key, value));
            }
            else
            {
                var blockId = BlockReference.BlockId;
                var root    = Node <TKey, TValue> .GetNode(Config, BlockReference.BlockId);

                root.Insert(key, value,
                            added =>
                {
                    Config.Blocks.FreeBlock(blockId);
                    if (added.Count == 1)
                    {
                        BlockReference.BlockId =
                            added[0].Value;
                    }
                    else
                    {
                        BlockReference.BlockId = InteriorNode
                                                 <TKey, TValue> .CreateRoot(
                            Config,
                            added
                            );
                    }
                });
            }
        }