Exemplo n.º 1
0
        public void Update(IKeyNode keyNode, T instance)
        {
            var value = _getter(instance);

            var node = (DataNode <K>)keyNode[this];

            if (node != null)
            {
                Debug.Assert(node.Keys.Contains(keyNode));

                if (_tree.Comparer.Compare(value, node.Key) == 0)
                {
                    return;
                }

                node.Keys.Remove(keyNode);
                if (node.Keys.Count == 0)
                {
                    _tree.Remove(node);
                }
            }

            node = _tree.AddOrGet(value);
            node.Keys.Add(keyNode);
            keyNode[this] = node;
        }
Exemplo n.º 2
0
        public IKeyNode Update(T instance, int length)
        {
            var result = _tree.AddOrGet(_getter(instance));

            //is new node
            if (result.Length == 0)
            {
                result.Length = length;
                _map.Alloc(result);
                return(result);
            }

            if (result.Length == length)
            {
                return(result);
            }

            _map.Realloc(result, length);
            return(result);
        }