Ejemplo n.º 1
0
        protected TValue GetValue(ref KeyWalker key, ulong keyI)
        {
            CPNode <TValue> head = Head;

            if (head != null)
            {
                TValue value = default(TValue);
                if (head.Set(ref key, ref value, ref head, CPMode.Find))
                {
                    return(value);
                }
            }
            throw new KeyNotFoundException(Localize.Localized("Key not found: ") + keyI.ToString());
        }
Ejemplo n.º 2
0
        public override bool Set(ref KeyWalker key, ref T value, ref CPNode <T> self, CPMode mode)
        {
            byte k = key.Buffer[key.Offset];

            if (key.Left == 1 && IsPresent(k))
            {
                T   newValue = value;
                int P        = GetValueIndex(k);
                if (P < 0x100 && P < _values.Length)
                {
                    value = _values[P];
                    if ((mode & CPMode.Set) != (CPMode)0)
                    {
                        _values[P] = newValue;
                    }
                }
                else
                {
                    value = default(T);
                    if ((mode & CPMode.Set) != (CPMode)0)
                    {
                        Assign(k, newValue);
                    }
                }
                return(true);
            }
            else if ((mode & CPMode.Create) != (CPMode)0)
            {
                if (key.Left == 1)
                {
                    Assign(k, value);
                    _localCount++;
                }
                else
                {
                    // Must convert back to bitmap or sparse node!
                    ConvertToBOrSNode(ref self, key.Left / 3 + 1);
                    self.Set(ref key, ref value, ref self, mode);
                }
            }
            return(false);
        }